我一个接一个地执行一堆操作。
基本结构是
表单的Run()
方法 > 调用Manager.DoStuff()
使用await Manager.DoStuff();
Manager.DoStuff()
是async Task ...
因此,我从不指望它会阻塞 UI 线程,而且大多数情况下它都不会:该DoStuff
方法包含以下内容:
var someTask = Something.BigTask();
var someTask2 = Something2.BigTask();
var someTask3 = Something3.BigTask();
await Task.WhenAll(someTask, someTask2, someTask3)
和一些个人的,例如:
await SomethingElse.BigTask();
但是当它到达某个特定的UI线程时,我最终得到了一个异常,说它没有发送消息。
方法不一样,就是async Task SomeMethod()
我唯一能想到的是它Invoke
在表单上使用来记录很多消息。这会影响它吗?如果是这样,我需要弄清楚如何阻止它破坏它。
大概如果您正在await
从 UI 线程执行异步任务,那么该异步任务中的任何内容都不应阻塞 UI 线程?
await
在对没有更多代码的最高级别调用之后,初始 Run() 方法简单地结束,因为这是它必须执行的最后一个任务。
有任何想法吗?