c# - 有没有办法强制异步/等待在第一个可用线程上继续?

标签 c# multithreading async-await c#-5.0

关于 C# 5.0 的一个很酷的事情是 async/await 关键字以及它如何简化您过去必须使用任务并行库 (TPL) 编写的管道。

我的问题是,如果你有线程不可知的代码,并且碰巧在主线程(阅读:UI 线程)上触发了一个异步操作,但你不一定关心继续发生在主线程上,那么你可以吗告诉 async/await 范例你希望它在第一个可用线程上继续,即使它不是主线程?

我认为能够做到这一点会大大提高某些场景的效率,但不是 Elixir 。

最佳答案

如果您不关心方法的其余部分在哪里继续,请使用 Task.ConfigureAwait :

await foo.DoSomethingAsync().ConfigureAwait(continueOnCapturedContext: false);

(您不必在此处使用命名参数,但它会增加清晰度。)

参见 Stephen Cleary's "best practices" article 的“配置上下文”部分了解更多详情。

关于c# - 有没有办法强制异步/等待在第一个可用线程上继续?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18215391/

相关文章:

c# - 调用类中每个属性的最佳方法

c# - 并行任务执行顺序

iphone - NSFetchedResultsController 委托(delegate)和后台驱动的更新

c++ - std::weak_ptr<T>::lock 是线程安全的吗?

javascript - async/await 会阻塞事件循环吗?

c# - 我将如何在 C# 中访问此任务 <String> 返回值?

没有浏览器控件类的 C# Web 浏览器

c# - 具有自定义请求的 HttpClient.GetStreamAsync()?

java - 使ArrayList添加线程安全而不使用线程安全集合

javascript - 如何运行函数,当用户没有在特定时间 JS 进行输入时