C# async异步下 出现异常的时候怎么不抛异常啊?

时光守护者 2017-07-13 10:59:23

public class LoginController : ApiController
{
// GET: api/Login
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}

// GET: api/Login/5
public HttpResponseMessage Get(int id)
{
if (HttpContext.Current.IsWebSocketRequest)
{
HttpContext.Current.AcceptWebSocketRequest(ProcessWSChat);
}
return new HttpResponseMessage(HttpStatusCode.SwitchingProtocols);
}

private async Task ProcessWSChat(AspNetWebSocketContext arg)
{
WebSocket socket = arg.WebSocket;
while (true)
{
ArraySegment<byte> buffer = new ArraySegment<byte>(new byte[1024]);
WebSocketReceiveResult result = await socket.ReceiveAsync(buffer, CancellationToken.None);
if (socket.State == WebSocketState.Open)
{
//获取用户发来的消息 无法确定数据格式
var message = Encoding.UTF8.GetString(buffer.Array, 0, result.Count);
//string returnMessage = "You send :" + message + ". at" + DateTime.Now.ToLongTimeString();
//JavaScriptSerializer js = new JavaScriptSerializer();
//将JSON序列化成对象
JSDeserialize jd = new JSDeserialize();
try{
//不是JSON 转换错误就抛异常
UserLogin json = jd.Deserialize<UserLogin>(message);
}
catch{
//但是尽管转换出错了 他也不会抛出异常 catch里的代码也不执行 直接全部跳过了
throw new Exception("转换错误")
}

string returnMessage = json.Username;

buffer = new ArraySegment<byte>(Encoding.UTF8.GetBytes(returnMessage));
await socket.SendAsync(buffer, WebSocketMessageType.Text, true, CancellationToken.None);
Huancun.Add("kehu1", socket,60,false);
await arg.WebSocket.SendAsync(buffer, WebSocketMessageType.Text, true, CancellationToken.None);
}
else
{
break;
}
}

}

}

WebSocket 接受客户端发来的消息,不知道是不是JSON ,尝试将JSON转换为对象,如果失败抛出异常。
但是失败了他并没有抛出异常!!!!!!!这个就很难处理了!!
可能因为因为异步的关系把,但我有不懂异步!
怎么样能让他正确抛出异常,有没有办法啊?
...全文
580 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
雷诺兹 2017-07-13
  • 打赏
  • 举报
回复
引用 11 楼 u012234713 的回复:
[quote=引用 7 楼 u010717459 的回复:] [quote=引用 6 楼 u012234713 的回复:] [quote=引用 5 楼 u010717459 的回复:] 实测异常可以抛出 客户端ws直接onerror
抛到哪里去了,怎么捕获? try{ //不是JSON 转换错误就抛异常 UserLogin json = jd.Deserialize<UserLogin>(message); } 这里以后下边全部 不执行了 我该怎么该代码? [/quote]是可以捕获到的 至于异常catch里面怎么处理就看自己业务咯 [/quote] 你这是异步方法里的吗?[/quote] 是
时光守护者 2017-07-13
  • 打赏
  • 举报
回复
引用 7 楼 u010717459 的回复:
[quote=引用 6 楼 u012234713 的回复:] [quote=引用 5 楼 u010717459 的回复:] 实测异常可以抛出 客户端ws直接onerror
抛到哪里去了,怎么捕获? try{ //不是JSON 转换错误就抛异常 UserLogin json = jd.Deserialize<UserLogin>(message); } 这里以后下边全部 不执行了 我该怎么该代码? [/quote]是可以捕获到的 至于异常catch里面怎么处理就看自己业务咯 [/quote] 你这是异步方法里的吗?
时光守护者 2017-07-13
  • 打赏
  • 举报
回复
引用 9 楼 xdashewan 的回复:
异步一般可以通过回调函数也就是委托来把处理完成的数据或者出错的信息返回回去
是的 这个代码怎么改 应该怎么写委托啊?? 我就想知道 UserLogin json = jd.Deserialize<UserLogin>(message); 他到底能不能转换成功 成不成 程序也得继续往下执行 谢谢了大哥哥哥哥
xdashewan 2017-07-13
  • 打赏
  • 举报
回复
异步一般可以通过回调函数也就是委托来把处理完成的数据或者出错的信息返回回去
  • 打赏
  • 举报
回复
异步是不能try catch的
雷诺兹 2017-07-13
  • 打赏
  • 举报
回复
引用 6 楼 u012234713 的回复:
[quote=引用 5 楼 u010717459 的回复:]
实测异常可以抛出 客户端ws直接onerror

抛到哪里去了,怎么捕获?
try{
//不是JSON 转换错误就抛异常
UserLogin json = jd.Deserialize<UserLogin>(message);
}
这里以后下边全部 不执行了 我该怎么该代码?
[/quote]是可以捕获到的 至于异常catch里面怎么处理就看自己业务咯
时光守护者 2017-07-13
  • 打赏
  • 举报
回复
引用 5 楼 u010717459 的回复:
实测异常可以抛出 客户端ws直接onerror
抛到哪里去了,怎么捕获? try{ //不是JSON 转换错误就抛异常 UserLogin json = jd.Deserialize<UserLogin>(message); } 这里以后下边全部 不执行了 我该怎么该代码?
雷诺兹 2017-07-13
  • 打赏
  • 举报
回复
实测异常可以抛出 客户端ws直接onerror
时光守护者 2017-07-13
  • 打赏
  • 举报
回复
引用 3 楼 wangzl1163 的回复:
[quote=引用 2 楼 u012234713 的回复:] [quote=引用 1 楼 wangzl1163 的回复:] 假如抛出了异常,你是如何接收的,在接收异常处理异常的地方看看有没有这个异常。
是啊 我也不清楚 你知道吗?[/quote] 你把throw改为console.write,在调试时查看输出窗口里面有没有输出,就知道是不是执行了catch。[/quote] 没有执行
  • 打赏
  • 举报
回复
引用 2 楼 u012234713 的回复:
[quote=引用 1 楼 wangzl1163 的回复:] 假如抛出了异常,你是如何接收的,在接收异常处理异常的地方看看有没有这个异常。
是啊 我也不清楚 你知道吗?[/quote] 你把throw改为console.write,在调试时查看输出窗口里面有没有输出,就知道是不是执行了catch。
时光守护者 2017-07-13
  • 打赏
  • 举报
回复
引用 1 楼 wangzl1163 的回复:
假如抛出了异常,你是如何接收的,在接收异常处理异常的地方看看有没有这个异常。
是啊 我也不清楚 你知道吗?
  • 打赏
  • 举报
回复
假如抛出了异常,你是如何接收的,在接收异常处理异常的地方看看有没有这个异常。
xdashewan 2017-07-13
  • 打赏
  • 举报
回复
引用 10 楼 u012234713 的回复:
谢谢了大哥哥哥哥
建议自己学习下,可以参考http://www.cnblogs.com/liuhaorain/p/3911845.html

62,039

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧