簡體   English   中英

Task.WhenAll OperationContext null

[英]Task.WhenAll OperationContext null

我的代碼類似於...

var fetchers = [listOfDataFetchers]
var results = Task.WhenAll(fetchers.Select(x => x.Fetch()).Result

由於 fetcher 基本上是在等待服務返回數據,因此這是任務和異步的完美用例。

但是,提取器需要OperationContext.Current ,在這種情況下我不能直接注入它(是的,我確信這一點)。

我已經嘗試更新到 .net 4.6.2,因為它應該在異步情況下修復 OperationContext.Current(並在 web.config 中將wcf:disableOperationContextAsyncFlow設置為false ),但這並沒有導致觀察到的任何變化行為。

所以,沒有去做一些事情

var oc = OperationContext.Current;
Parallel.ForEach(entries, entry =>
{
    OperationContext.Current = oc;
    Execute(entry);
});

我有什么選擇嗎?

經過一些更多的實驗,我發現了這個問題。 此修復程序是“簡單的”不使用.Result ,但awaitThread.WhenAll ,讓異步冒泡堆棧的服務,從而使合同本身具有異步簽名。

我的工作假設是.Result “隱藏”了 WCF 的並行性,因此 .net 4.6.2 中添加的異步上下文支持不會觸發。 如果有人有更多的見解,我會很樂意對此進行更正。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM