我一个接一个地执行一系列操作。
基本结构是
表单的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
来记录大量消息。这会影响它吗?如果是这样,我需要弄清楚如何阻止它破坏它。
大概如果你在UI线程上对异步任务进行await
,那么异步任务中的任何内容都不应该阻止UI线程吗?
在对await
的最高级别调用之后没有更多代码,初始Run()方法只是结束,因为这是它必须执行的最后一项任务。
有什么想法吗?
答案 0 :(得分:3)
我认为你会发现,除非你的工作实际上是异步的(通常是IO)而不是阻止没有异步IO的工作,否则调用将同步执行。考虑Task.Run
在ThreadPool中运行,甚至Task.Factory.StartNew(theCall, TaskCreationOptions.LongRunning)
... http://msdn.microsoft.com/en-us/library/dd321263.aspx