use*_*851 3 c# multithreading asynchronous
在同步编程中(在async/await到达现场之前),我很清楚如何或为什么发生跨线程异常.如果我启动了一个后台线程来完成一些繁重的任务,以便卸载UI线程并使其响应,我知道如何从后台线程访问UI线程.如果有疑问,我甚至可以检查给定代码执行的线程.
使用异步/等待异步编程,我发现什么是明确的线程识别模糊和模糊(甚至在调试中调用堆栈根据众多等待任务跳转到整个地方).
我试图找出的是一种路线图,可以帮助我识别沿着颠簸的异步/等待曲折的跨线程危险区域/陷阱(原谅隐喻).
在异步编程方面,我究竟应该注意什么来避免跨线程异常?这些可以制成某种清单吗?
我在async介绍中介绍了主要的线程注意事项.具体而言,默认行为await是捕获"上下文",然后在该"上下文"中恢复该方法.在UI线程的情况下,该上下文将导致该async方法在UI线程上恢复.
因此,简单async而await简单地完全避免大多数跨线程问题.
请注意,如果您确实引入了后台线程(例如Task.Run),那么当然这些后台线程可能会导致跨线程异常,您必须适当地避免这些异常.
| 归档时间: |
|
| 查看次数: |
404 次 |
| 最近记录: |