C# 等待任务不执行';捕获同步上下文

C# 等待任务不执行';捕获同步上下文,c#,multithreading,task-parallel-library,synchronizationcontext,executioncontext,C#,Multithreading,Task Parallel Library,Synchronizationcontext,Executioncontext,我正在尝试使用ExecutionContext和SynchronizationContext 我正在使用WinForms和.NETFramework4.5 这是我的密码 private async void按钮1\u单击(对象发送方,事件参数e) { var capturedExecutionContext=ExecutionContext.Capture(); 等待任务。运行(()=> { ExecutionContext.Run(capturedExecutionContext,异步(状态)

我正在尝试使用
ExecutionContext
SynchronizationContext

我正在使用WinForms和.NETFramework4.5

这是我的密码

private async void按钮1\u单击(对象发送方,事件参数e)
{
var capturedExecutionContext=ExecutionContext.Capture();
等待任务。运行(()=>
{
ExecutionContext.Run(capturedExecutionContext,异步(状态)=>
{
//capturedSyncContext不为空
var capturedSyncContext=SynchronizationContext.Current;
等待任务。延迟(3000);
SynchronizationContext.Current.Post((状态)=>{
lblHelloWorld.Text=“Nice”;
},空);
},空);
});
}
capturedSyncContext
不是预期的
null
,因为
ExecutionContext
已经被捕获

但是,在wait语句之后,
SynchronizationContext.Current
返回
null

我认为,当您等待任务等待者时,应该捕获
SynchronizationContext


那么,在这种情况下,为什么
SynchronizationContext
为空呢?

您读过Stephen Toub的优秀文章吗?这是否回答了您的问题?那篇文章是我玩弄执行上下文的原因。是,我知道使用Task.Run时,SyncContext不会与ExecutionContext一起流动。但是,我已经在Task.Run之前显式捕获了ExecutionContext。ExecutionContext也被捕获SyncContext这就是为什么capturedSyncContext不是空的你读过Stephen Toub的优秀文章吗?这回答了你的问题吗?那篇文章是我玩弄执行上下文的原因。是,我知道使用Task.Run时,SyncContext不会与ExecutionContext一起流动。但是,我已经在Task.Run之前显式捕获了ExecutionContext。ExecutionContext也被捕获SyncContext,这就是capturedSyncContext不为null的原因