88得票2回答
为什么我要使用Task.ConfigureAwait(continueOnCapturedContext: false)?

考虑以下 Windows Forms 代码:private async void UpdateUIControlClicked(object sender, EventArgs e) { this.txtUIControl.Text = "I will be updated ...

76得票5回答
为什么TaskScheduler.Current是默认的TaskScheduler?

任务并行库很棒,我在过去几个月中经常使用它。然而,有一件事情真的困扰着我:TaskScheduler.Current 是默认任务调度程序,而不是 TaskScheduler.Default。这在文档和示例中一眼看上去绝对不明显。 Current 可能会导致微妙的错误,因为其行为取决于是否在另...

37得票2回答
如何获取一个使用SynchronizationContext的任务?SynchronizationContext到底是如何使用的?

我仍在学习整个任务概念和TPL。根据我的理解,如果存在SynchronizationContext功能,则await将使用它来将任务“调度”到某个地方。另一方面,Task类中的函数不使用上下文,对吗? 例如,Task.Run(...)将始终在线程池的工作线程上调度操作,并完全忽略Synchr...

36得票1回答
SynchronizationContext.Send和SynchronizationContext.Post有什么区别?

感谢Jeremy Miller在Functional Programming For Everyday .NET Development中的好工作,我有一个可行的命令执行器,它可以做我想做的一切(在线程池中进行繁重的工作,将结果或错误发送回同步上下文,甚至将进度发布回同步上下文),但我无法解释...

35得票3回答
我们在调用异步回调的库中是否应使用ConfigureAwait(false)?

使用 ConfigureAwait(false) 的时机有很多指南,特别是在使用 C# 中的 await/async 时。 一般建议在库代码中使用 ConfigureAwait(false) ,因为它很少依赖于同步上下文。 然而,如果我们正在编写一些非常通用的实用程序代码,需要将函数作为输...

32得票2回答
在 C# 的 async/await 代码中,“context” 究竟是什么意思?

让我们看一些简单的C#异步/等待代码,其中我在ConfigureAwait(false)之前和之后都有一个对象引用(obj)private async Task<SomeObject> AnAsyncLibraryMethod(SomeObject obj) { Conso...

22得票2回答
为什么我的Winforms应用程序中SynchronizationContext.Current是空的?

我刚写了这段代码:System.Threading.SynchronizationContext.Current.Post( state => DoUpdateInUIThread((Abc)state), abc); 但是 System.Threading.Synch...

21得票1回答
在主UI线程上的Continuation中,SynchronizationContext.Current为null

我一直在尝试追踪Winforms应用程序中的以下问题: 在主线程上运行的任务的继续操作(即.ContinueWith)中,SynchronizationContext.Current为null(我期望当前同步上下文为System.Windows.Forms.WindowsFormsSynchr...

18得票2回答
在异步方法中,Semaphore.Wait与WaitAsync有何区别?

我正在尝试了解SemaphoreSlim的Wait和WaitAsync之间的区别,它们在这种情况下使用:private SemaphoreSlim semaphore = new SemaphoreSlim(1); public async Task<string> Get() {...

17得票2回答
如何强制await在同一线程上继续运行?

await 不能保证在生成的任务中继续执行: private void TestButton_Click(object sender, RoutedEventArgs e) { Task.Run(async () => { Debug.WriteLine...