【发布时间】:2017-02-28 17:33:49
【问题描述】:
我一直试图找出 UI 被 ViewModel 方法阻塞的原因,并意识到这部分代码:
await Task.WhenAll(getOutput1(), getOutput2());
是问题所在。我设法通过以下方式解除对 UI 的阻止:
await Task.WhenAll(Task.Run(() => getOutput1()), Task.Run(() => getOutput2()));
getOutput1()和getOutput2()在ViewModel中都是async,返回类型为Task,代码是从View中调用的。
当我调用 Task.Run() 并直接提供任务时调用 Task.WhenAll 有什么区别?
【问题讨论】:
-
如果
getOutput1和getOutput2都“真的”异步,那么第一个选项必须正常工作。你能展示这些方法吗?请注意,如果您没有阅读“IO”操作,异步方法将同步执行 -
完全取决于
getOutput1和getOutput2的性质。如果他们在自己没有调用任何异步行为的情况下完成大量工作,则该工作将在代码版本 1 中的原始线程上完成。 -
@Damien_The_Unbeliever 实际上你是对的,我只在方法内的 UI 线程上调度时才调用异步行为。感谢您的洞察力
标签: c# multithreading user-interface uwp