首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Task.WhenAll OperationContext为空

Task.WhenAll OperationContext为空
EN

Stack Overflow用户
提问于 2017-10-09 18:50:22
回答 1查看 167关注 0票数 1

我的代码类似于...

代码语言:javascript
复制
var fetchers = [listOfDataFetchers]
var results = Task.WhenAll(fetchers.Select(x => x.Fetch()).Result

因为抓取器基本上是在等待服务返回数据,所以这是任务和异步的完美用例。

但是,抓取器需要OperationContext.Current,在这种情况下我不能直接注入它(是的,这一点我很确定)。

我已经尝试更新到.net 4.6.2,因为它应该修复了异步情况下的OperationContext.Current (并在web.config中将wcf:disableOperationContextAsyncFlow设置为false ),但这并没有导致观察到的行为发生任何变化。

所以,我不是在讲关于

代码语言:javascript
复制
var oc = OperationContext.Current;
Parallel.ForEach(entries, entry =>
{
    OperationContext.Current = oc;
    Execute(entry);
});

我还有其他选择吗?

EN

回答 1

Stack Overflow用户

发布于 2017-10-10 00:35:19

经过更多的实验,我找到了问题所在。修复方法是“简单地”不使用.Result,而是使用await Thread.WhenAll,让异步冒泡到服务的堆栈,这样契约本身就有一个异步签名。

我的工作假设是,.Result“隐藏”了对WCF的并行性,因此.net 4.6.2中添加的异步上下文支持不会触发。如果任何人有更多的见解,我将非常乐意纠正这一点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46644660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档