我有一些执行I / O操作的集线器方法,我想异步调用它。
在我的集线器方法中使用ConfigureAwait(false)
是否安全,或者SignalR是否需要捕获的SynchronizationContext用于请求信息或类似内容?
public async Task<Response> Save() {
// do some prep work
var response = await SaveThingsAsync().ConfigureAwait(false);
// do something with response
return response;
}
澄清一下:我的代码不需要线程文化或SynchronizationContext中存储的任何其他内容 我担心的是SignalR服务器代码可能会在那里存储信息,例如客户端ID,请求信息等,如果从不同的线程继续执行异步方法,它可能无法访问。
当我测试我的方法时,它看起来工作得很好,但这并不能证明任何东西。
答案 0 :(得分:5)
ConfigureAwait不会删除同步上下文。它只会导致任务完成继续不使用当前的同步上下文。
如果当前异步方法的其余部分不依赖于同步上下文,则始终可以安全使用。强调方法而不是线程。
答案 1 :(得分:4)
SignalR不依赖于SynchronizationContext
。它通常是在Win32服务(以及用于测试的控制台应用程序)中自托管的,其中没有SynchronizationContext
。