Tại nơi làm việc, tôi hiện đang bị mắc kẹt trong 3.5, nhưng chúng tôi đang sử dụng asyncbridge cho async-await. Chúng tôi đang sử dụng rất nhiều cuộc gọi không đồng bộ WCF cũ, và tôi muốn bọc nó vào mẫu chờ đợi async mới.WCF 3.5, AsyncBridge. Bọc trong async-await
Tôi gói này như sau:
// 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;
}
Sau đây là genereted trong proxy 3,5 WCF:
GetScannedDocumentsAsync GetScannedDocumentsCompleted GetScannedDocumentsEventArgs
Something nói với tôi rằng điều này có thể được thực hiện rất nhiều sạch hơn, tôi đã bỏ lỡ một cái gì đó cruical?
Ngoài ra, phương pháp này có thực thi không đồng bộ không? Biên dịch với toán tử async chỉ tạo ra một lỗi.
Trả về 'GetScannedDocumentsAsync'' IAsyncResult'? Nếu vậy, [this] (http://blogs.msdn.com/b/pfxteam/archive/2011/06/27/10179452.aspx) bài đăng trên blog tuyệt vời mô tả cách thực hiện đúng. – Noseratio
'async' chỉ được phép trên các phương thức có 'đang chờ đợi' bên trong chúng. Định nghĩa của 'GetScannedDocumentsAsync' là gì? –
Nếu bạn nghĩ rằng 'async' là bắt buộc đối với một phương thức để thực sự thực thi không đồng bộ, thì bạn thực sự không hiểu ý nghĩa của' async'. Bạn có lẽ nên đọc thêm về nó. – svick