C# 任务类型和配置等待(false),是否可能?

C# 任务类型和配置等待(false),是否可能?,c#,async-await,task-parallel-library,synchronizationcontext,configureawait,C#,Async Await,Task Parallel Library,Synchronizationcontext,Configureawait,我一直在读关于任务型和等待型的书。我想我已经很好地掌握了它的基本机制(waiter,asynchmethodbuilder…),但是当我试图理解configurewait(false)在这种场景中的用法(如果可能的话)时,有点不对劲 我的问题是: ConfigureWait是否保留用于“true”任务,即SynchronizationContext的用法 如果是这样,并且假设您正在编写一个通用库,该库公开了它自己的任务类型实现,那么当代码遇到任务时,您是否应该只使用ConfigureAwait(

我一直在读关于任务型和等待型的书。我想我已经很好地掌握了它的基本机制(waiter,asynchmethodbuilder…),但是当我试图理解configurewait(false)在这种场景中的用法(如果可能的话)时,有点不对劲

我的问题是:

ConfigureWait是否保留用于“true”任务,即SynchronizationContext的用法

如果是这样,并且假设您正在编写一个通用库,该库公开了它自己的任务类型实现,那么当代码遇到任务时,您是否应该只使用ConfigureAwait(false)


谢谢。

如果您的库的任务类型在等待时未捕获上下文,则库的用户将无法执行此操作:

private async void Button_Click(object sender, EventArgs e)
{
    string input = Textbox1.Text;
    TaskLike<string> taskLike = YourLibrary.ProcessAsync(input);
    string result = await taskLike;
    Label1.Text = result // InvalidOperationException: Cross-thread operation not valid
}

…然后,如果调用方的lambda包含线程仿射代码(如读取UI控件的属性),则在使用
ConfigureAwait(false)
进行内部等待后调用
操作
,可能会导致跨线程冲突异常。要解决此问题,可能需要在方法签名中引入配置参数
continueOnCapturedContext
。至少这是该公司选择的解决方案。

我的问题:为什么?在需要使用基于任务的异步编程,但不能使用内置任务类的情况下,您有什么具体的用例?您的知识渊博的答案是否取决于为什么?问题是这是否可能。我在调查此事时没有找到答案。
是为“真实”任务保留的配置等待
-不,不是。请参阅“ConfigureAwait(false)做什么?”一节。是的,它可以用于任何任务,如类型。。。但你必须写下来。看看这个图书馆。具体查找
ConfiguredYieldAwaitable
,这是一种配置
任务的方法。Yield
具有自定义等待器。在回答这个问题时,还提供了一些自定义配置的可等待项示例
public TaskLike<string> ProcessAsync(Action action);