繁体   English   中英

尽管使用了wait,UI线程仍然会阻塞

[英]Despite using await, the UI thread still blocks

我接连执行一堆操作。

基本结构是

形式的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()方法只是结束,因为这是它必须执行的最后一项任务。

有任何想法吗?

我认为您会发现,在执行实际上是异步的(通常是IO)而不是阻塞没有异步IO的工作之前,调用将同步执行。 考虑将Task.Run运行在ThreadPool甚至是Task.Factory.StartNew(theCall, TaskCreationOptions.LongRunning) ... http://msdn.microsoft.com/zh-cn/library/dd321263.aspx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM