【发布时间】:2021-09-20 19:57:08
【问题描述】:
我正在开发一个 WPF 应用程序,我遇到了冻结问题,现在我知道它是一个单线程应用程序,但我对术语感到困惑
简单的术语
Async/Await 和 Dispatcher 的区别
我想解释一下我的观点,这样就清楚了我的误解,直到现在我才知道大多数应用程序都是 STA(在 c# 中),并且您必须使用异步编程,这可以很好地涉及
- 单线程通过优先处理已完成的工作,然后使用工作线程通知 UI 线程繁重的工作已完成,从而转移 UI 线程上的工作
- 也是一个真正的多线程应用程序,需要创建一个线程来完成其上的任务
我认为在很大程度上我的概念至少是可靠的,至少可以说我缺乏的是应用这些能力
例如,虽然我之前为了启用异步编程,但我们必须使用从 main 方法调用的委托,这演变为委托的分派器切割,进一步演变为异步并等待切割“任何单次使用”的分派器(甚至那个字面关键字)
所以我在函数声明中只使用了“async”词,然后是“task”,然后通过粘贴“await”词等待一些紧张的过程,然后最终用 Task.Run( () => 紧张工作())
但现在我很困惑你必须使用 Dispatcher 这个词,因为 UI 元素只能由 dispatcher 访问,并且使用 Dispatcher.Invoke(IntenseWork()),然后是 Dispatcher.Begininvoke 和 Dispatcher.AsyncIncoke
怀疑:
在这种情况下 async/await 和 task.run 是不够的,甚至在这里使用任务并行库
我提出了问题并进行了研究,并坚持这些结论,这些是我以前的问题
Using async and await to achieve asynchronicity in example problem
【问题讨论】:
-
所以你缺乏对 1) what async is 和 2) why Invoke is required 从不同线程访问 UI 的理解。这些是不相关的概念。涉及不同线程时始终需要调用,无论该线程的参与是否由
async引起。而asyncdoes not必然涉及其他线程,除非你特别要求。
标签: c# .net multithreading asynchronous async-await