/// <summary>
/// async 异常捕获问题
/// </summary>
/// <param name="context"></param>
/// <returns></returns>
static async Task<string> TestException(string context) {
return string.Format("【{0}】 长度:【{1}】",context,context.Length);
} /// <summary>
/// 该方法无法获取异常
/// </summary>
static void Test1()
{
try
{
//产生异常 无法捕获异常
TestException(null).ContinueWith(r =>{
Console.WriteLine(r.Result);
});
}
catch (Exception ex)
{
throw;
}
} /// <summary>
/// 不能报异常(async与await一起使用)
/// </summary>
/// <returns></returns>
static async Task Test2()
{
string result = await TestException(null);
string test = result;
}

Http async / await 方式请求实例:

    public static async Task<string> HttpGet(string Url)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
request.Method = "GET";
request.ContentType = "text/html;charset=UTF-8"; using (var response =await request.GetResponseAsync())
{
Stream myResponseStream = response.GetResponseStream();
StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.UTF8);
string retString = myStreamReader.ReadToEnd();
return retString;
}
} public static async Task<string> HttpPostAsync(string url, string postData)
{
try
{
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
request.ContentType = "application/json";
request.ContentLength = byteArray.Length;
using (Stream myRequestStream = await request.GetRequestStreamAsync())
{
myRequestStream.Write(byteArray, , byteArray.Length);
WebResponse response = request.GetResponse();
StreamReader myStreamReader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("utf-8"));
return myStreamReader.ReadToEnd();
}
}
catch (Exception ex)
{
Logger.Info(ex);
return string.Empty;
} } public static async Task<string> HttpPostAsync(string url, Dictionary<string,string> paramList)
{
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
StringBuilder sb = new StringBuilder();
foreach (var item in paramList)
{
sb.Append(item.Key + "=" + item.Value + "&");
}
string paramData = sb.ToString().Trim('&');
byte[] data = System.Text.Encoding.UTF8.GetBytes(paramData);
request.Method = "post";
//这句不能少 不难post请求 得不到对应的响应结果
request.ContentType = "application/x-www-form-urlencoded";
using (Stream myRequestStream = await request.GetRequestStreamAsync())
{
myRequestStream.Write(data, , data.Length);
WebResponse response = request.GetResponse();
StreamReader myStreamReader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("utf-8"));
return myStreamReader.ReadToEnd();
}
}
catch (Exception ex)
{
Logger.Info(ex);
return string.Empty;
} }
    /// <summary>
/// PPTV点卡充值
/// </summary>
/// <param name="mobie">手机号</param>
/// <param name="cardnumber">点卡卡密</param>
/// <returns></returns>
public async Task<string> ExchangePPTVCard(string mobie, string cardnumber)
{
string agent = "lemon_act";
string agentkey = "HF0abDEc";
string username = mobie;
//aesyhhxw72453525 月卡
//hnscpyau66772763 半年卡
//mwusrbdu45743377 年卡
//string cardnumber = "hnscpyau66772763";
string urlEncodeUsername = StringHelper.UrlEncode(username);
string sign = StringHelper.MD5(StringHelper.UrlEncode(string.Format("{0}&{1}&{2}",username,cardnumber,agentkey)));
Dictionary<string, string> paramList = new Dictionary<string, string>();
paramList.Add("username", urlEncodeUsername);
paramList.Add("cardnumber", cardnumber);
paramList.Add("agent", agent);
paramList.Add("sign", sign);
string url = "https://api.vip.pptv.com/ppcard/exchange";
string result = await HttpHelper.HttpPostAsync(url, paramList);
UserPPTVCardExchangeResultModel exchangeResult = JsonConvert.DeserializeObject<UserPPTVCardExchangeResultModel>(result);
return result;
}
/// <summary>
/// 充值点卡
/// </summary>
/// <param name="mobile">手机号(手机号必须注册)</param>
/// <param name="cardnumber">点卡卡密</param>
/// <returns></returns>
[HttpGet, Route("ExchangeCard")]
public async Task<Result<bool>> ExchangeCard(string mobile,string cardnumber)
{
Result<bool> result = new Result<bool>();
try
{
string secretKey = Request.Headers.GetValues("SecretKey").FirstOrDefault();
ChannelsService channelservice = new ChannelsService();
int channelId = channelservice.GetChannerIdBySecretKey(secretKey); UsersService userService = new UsersService();
//1.判断手机是否存在
bool isExist = userService.IsRegisterPPTVByMobile(mobile, channelId);
result.ReturnCode = StateCode.Success;
if (!isExist)
{
Logger.Warn(string.Format("【0】手机号尚未注册",mobile));
result.Data = false;
result.ReturnMsg = "该手机尚未注册";
return result;
}
//2.判断该点卡是否可以使用
bool isEnable = await PPTVCardInfo(mobile,cardnumber);
if (!isEnable)
{
Logger.Warn(string.Format("【0】点卡卡密已经被使用", cardnumber));
result.Data = false;
result.ReturnMsg = "该点卡卡密已经被使用";
return result;
}
//3.充值PPTV点卡
bool isChange = await ExchangePPTVCard(mobile, cardnumber);
if (!isChange)
{
result.Data = false;
result.ReturnMsg = "该点卡卡密已经被使用";
return result;
}
result.Data = userService.ExchangePPTVCard(cardnumber);
if (result.Data)
{
result.ReturnMsg = "充值点卡成功";
}
else
{
result.ReturnMsg = "充值点卡失败";
}
}
catch (Exception ex)
{
result.ReturnMsg = "服务器内部发生异常";
Logger.Error("UsersController[ExchangeCard]", ex);
}
return result;
}

 使用Task.Run(()=>{})方式执行

 /// <summary>
/// 更新订单状态
/// </summary>
/// <param name="consumptionId">订单ID</param>
/// <param name="totalFee">总费用</param>
/// <param name="status">状态</param>
/// <returns></returns>
public async Task<bool> CheckUserConsumptionStatus(Guid consumptionId, string buyerEmail, decimal totalFee, int status)
{ return await Task.Run(() => {
//TODO
return true; }); }

最新文章

  1. codevs 1080 线段树点修改
  2. python使用pdkdf2加盐密码
  3. 【洛谷P1196】银河英雄传说
  4. XPS1330 作为Linux服务器之安装配置计划
  5. HDU 3333 - Turing Tree (树状数组+离线处理+哈希+贪心)
  6. .net如何自定义config配置文件节点
  7. Java 之 网络编程
  8. 深入浅出Node.js (附录D) - 搭建局域NPM仓库
  9. textview设置不同字体大小
  10. 获取屏幕宽高度与可视区域宽高度(availWidth、clientWidth、width、innerWidth)
  11. 用Docker解决坑爹的环境搭建系列——mysql:5.6
  12. laravel之ORM增删改查数据
  13. AGC004F Namori 树形DP、解方程(?)
  14. Exception in thread &quot;main&quot; java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z
  15. Android 发送自定义广播(标准和本地)
  16. ERP项目实施记录01
  17. Replication容量和错误日志
  18. babel更新之后的 一些坑
  19. 初学lua --lua嵌入c++的一个问题(初始化lua出错,版本问题)
  20. [Selenium]当DOM结构里面有iFrame,iFrame里面是html,怎么send keys to 里面的body,怎么用Assert进行验证?

热门文章

  1. Duplicate entry &#39;xxx&#39; for key &#39;xxx&#39;
  2. js 判断数据是否为空
  3. A1134. Vertex Cover
  4. PHP魔术方法大全
  5. 详解 清除浮动 的多种方式(clearfix)
  6. pytest 8 参数化parametrize
  7. 整合shiro出现【Correct the classpath of your application so that it contains a single, compatible version of org.quartz.Scheduler】
  8. JS实现选择排序
  9. mac host文件配置
  10. python自动化开发-[第二十四天]-高性能相关与初识scrapy