在工作中,我目前停留在3.5,但我們正在使用asyncbridge進行異步等待。我們使用了很多舊的WCF異步調用,並且我想將其包裝到新的異步等待模式中。WCF 3.5,AsyncBridge。包裝異步等待
我這個包裹如下:
// async is wrong
public /*async*/ Task<ScannedDocumentResult> GetScannedDocumentsTask(String assignmentId)
{
TaskCompletionSource<ScannedDocumentResult> tcs = new TaskCompletionSource<ScannedDocumentResult>();
EventHandler<GetScannedDocumentsCompletedEventArgs> handler = null;
handler = (o, e) =>
{
if (e.UserState != tcs)
return;
if (e.Error != null)
tcs.SetException(e.Error);
else if (e.Cancelled)
tcs.SetCanceled();
else
tcs.SetResult(e.Result);
GetScannedDocumentsCompleted -= handler;
};
GetScannedDocumentsCompleted += handler;
GetScannedDocumentsAsync(assignmentId, tcs);
return tcs.Task;
}
下在3.5 WCF代理的genereted:
GetScannedDocumentsAsync GetScannedDocumentsCompleted GetScannedDocumentsEventArgs
有個聲音告訴我,這是可以做到更清潔,我錯過了一些有趣的東西嗎?
此外,此方法是否會執行異步?用async操作符編譯只會產生一個錯誤。
'GetScannedDocumentsAsync'是否返回'IAsyncResult'?如果是這樣,[本](http://blogs.msdn.com/b/pfxteam/archive/2011/06/27/10179452.aspx)優秀的博客文章介紹瞭如何做到這一點。 – Noseratio
'async'只能在內部有'await'的方法上使用。 'GetScannedDocumentsAsync'的定義是什麼? –
如果您認爲異步執行方法需要'async',那麼您實際上並不理解'async'的含義。你應該多讀些關於它。 – svick