异步编程中的跨线程异常

use*_*851 3 c# multithreading asynchronous

在同步编程中(在async/await到达现场之前),我很清楚如何或为什么发生跨线程异常.如果我启动了一个后台线程来完成一些繁重的任务,以便卸载UI线程并使其响应,我知道如何从后台线程访问UI线程.如果有疑问,我甚至可以检查给定代码执行的线程.

使用异步/等待异步编程,我发现什么是明确的线程识别模糊和模糊(甚至在调试中调用堆栈根据众多等待任务跳转到整个地方).

我试图找出的是一种路线图,可以帮助我识别沿着颠簸的异步/等待曲折的跨线程危险区域/陷阱(原谅隐喻).

在异步编程方面,我究竟应该注意什么来避免跨线程异常?这些可以制成某种清单吗?

Ste*_*ary 6

我在async介绍中介绍了主要的线程注意事项.具体而言,默认行为await是捕获"上下文",然后在该"上下文"中恢复该方法.在UI线程的情况下,该上下文将导致该async方法在UI线程上恢复.

因此,简单asyncawait简单地完全避免大多数跨线程问题.

请注意,如果您确实引入了后台线程(例如Task.Run),那么当然这些后台线程可能会导致跨线程异常,您必须适当地避免这些异常.

  • 有人低头投票斯蒂芬?那太奇怪了.我的+1在任何情况下都在那里:) (3认同)