Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我可以在信号集线器中使用'ConfigureWait(false)`吗,或者信号器基础设施是否依赖于SynchronizationContext?_C#_Signalr_Signalr Hub - Fatal编程技术网

C# 我可以在信号集线器中使用'ConfigureWait(false)`吗,或者信号器基础设施是否依赖于SynchronizationContext?

C# 我可以在信号集线器中使用'ConfigureWait(false)`吗,或者信号器基础设施是否依赖于SynchronizationContext?,c#,signalr,signalr-hub,C#,Signalr,Signalr Hub,我有一些集线器方法,它们执行我想要异步调用的I/O操作 在我的集线器方法中使用ConfigureAwait(false)安全吗,或者signer是否需要捕获的同步上下文来获取请求信息或类似信息 public async Task<Response> Save() { // do some prep work var response = await SaveThingsAsync().ConfigureAwait(false);

我有一些集线器方法,它们执行我想要异步调用的I/O操作

在我的集线器方法中使用
ConfigureAwait(false)
安全吗,或者signer是否需要捕获的同步上下文来获取请求信息或类似信息

    public async Task<Response> Save() {
        // do some prep work
        var response = await SaveThingsAsync().ConfigureAwait(false);
        // do something with response
        return response;
    }
公共异步任务保存(){
//做一些准备工作
var response=await SaveThingsAsync().ConfigureAwait(false);
//做些有反应的事情
返回响应;
}
澄清一下:我的代码不需要线程区域性或存储在SynchronizationContext中的任何其他内容。
我担心的是,signar服务器代码可能会在那里存储信息,如客户机id、请求信息等,如果异步方法从其他线程继续,它可能无法访问这些信息


当我测试我的方法时,它似乎工作得很好,但这不一定证明任何事情。

ConfigureAwait没有删除同步上下文。它只会导致任务完成继续不使用当前同步上下文


如果当前异步方法的其余部分不依赖于同步上下文,那么使用它总是安全的。强调方法而不是线程。

信号器不依赖于同步上下文。它通常在Win32服务(以及控制台应用程序,用于测试)中自托管,其中不存在
SynchronizationContext


另请参见。

您能详细说明最后一段吗?在我的示例中,
Save
方法将在没有当前同步上下文的情况下继续。当它完成时,一些异步信号器方法将被通知并继续。即使
Save
方法没有使用当前同步上下文,该方法是否可以恢复同步上下文(如果它依赖于它)?我的印象是,一旦调用
ConfigureAwait(false)
,所有调用异步方法的操作都将在没有当前同步上下文的情况下执行。如果存在同步上下文,则不会删除同步上下文。相反,您应该切换到不存在同步上下文的线程池。您的任务在线程池上完成。等待该任务的任何人都不受该任务完成位置的影响。接受此答案,因为它专门针对Signal。