异步委托如何捕获异常

洛洛洛小晴 2020-08-14 05:28:24
代码如下,main函数和test函数均捕获不到异常
  public delegate bool AsyncDelegate(int loop);
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
try
{
Test();
}
catch(Exception err)
{

}
}

public static void Test()
{
AsyncDelegate dlgt = new AsyncDelegate(LongRun);

IAsyncResult ar = dlgt.BeginInvoke(1000, null, null);

while (ar.IsCompleted == false)
{
Thread.Sleep(100);
}
try
{
bool test=dlgt.EndInvoke(ar);
}
catch
{
Console.WriteLine("发生错误");
}
}


public static bool LongRun(int loop)
{
for (int i = 0; i < loop; i++)
{
for (int j = 0; j < loop; j++)
{
throw new Exception("long run 发生错误");
}
}
return true;
}
...全文
6144 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
兔子-顾问 2021-01-26
  • 打赏
  • 举报
回复
还是用vb.net吧,最初写一行 OnError resume next c#的话,只能方法内部写异常处理,也可以通过AppDomain.CurrentDomain.UnhandledException事件去获取,不过这都马后炮了,因为处理完程序也退出了,最好是找到异常出错地方去加捕获。
xjhxyeti 2021-01-22
  • 打赏
  • 举报
回复
你的需求是要等待从数据库里面返回值再往下执行,不适合用异步,直接开线程,等待线程执行完,就可以,异步一般最好不要涉及执行顺序的场景。在ui线程中直接执行invoke,界面会卡(除非涉及的时间很短)。
洛洛洛小晴 2020-08-17
  • 打赏
  • 举报
回复
引用 4 楼 以专业开发人员为伍 的回复:
有启动子线程,然后父线程又去死循环阻塞,然后还要整一大堆繁琐的语法来充数,这是从哪里学的编程啊?

删除掉多余的代码,老实地写一个顺序代码,不用制造矛盾。

我的实际场景是多线程调用一个读取数据库的函数,读取数据库的函数返回值为datatable。上面的例子,是我为了提问简化的。不知道这种多线程带返回值读取数据库的场景,您有没有什么好的思路可提供呢?我是才接触多线程
洛洛洛小晴 2020-08-15
  • 打赏
  • 举报
回复
我用的 .net framwork 4.0,有什么好办法吗
  • 打赏
  • 举报
回复
有启动子线程,然后父线程又去死循环阻塞,然后还要整一大堆繁琐的语法来充数,这是从哪里学的编程啊?

删除掉多余的代码,老实地写一个顺序代码,不用制造矛盾。
洛洛洛小晴 2020-08-15
  • 打赏
  • 举报
回复
引用 1 楼 贵阳老马马善福专业维修游泳池堵漏防水工程 的回复:
如果是C# 6.0或者以上,在ansync里面直接用try catch就可以
我用的 .net framwork 4.0,有什么好办法吗
threenewbee 2020-08-14
  • 打赏
  • 举报
回复
如果是C# 6.0或者以上,在ansync里面直接用try catch就可以

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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