2013-08-21 14 views
5

Şu an için 3.5 konumunda kaldım, ancak asyncbridge'i async-bekleme için kullanıyoruz. Eski WCF async çağrılarını kullanıyoruz ve bunu yeni async-bekle desenine sarmak istiyorum.WCF 3.5, AsyncBridge. Eşzamanlı olarak bekle

// 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 vekaleten genereted şunlardır::

şey söylüyor

GetScannedDocumentsAsync GetScannedDocumentsCompleted GetScannedDocumentsEventArgs bu yapılabileceğini şöyle

Bunu sarma ediyorum çok temizleyici, bir şeyleri özledim mi?

Ayrıca, bu yöntem hiç bir zaman uyumsuz yürütecek mi? Async operatörü ile derleme sadece bir hata üretir.

+1

'GetScannedDocumentsAsync' IAsyncResult'u döndürüyor mu? Eğer öyleyse, [bu] (http://blogs.msdn.com/b/pfxteam/archive/2011/06/27/10179452.aspx) mükemmel blog yazısı nasıl doğru yapacağını açıklar. – Noseratio

+0

'async' yalnızca içlerinde' beklemiş 'yöntemlerde kullanılabilir. GetScannedDocumentsAsync' nedir? –

+0

Async'in bir zamanlamanın asenkronize olarak yürütülmesi için gerekli olduğunu düşünüyorsanız, async'in ne anlama geldiğini gerçekten anlamıyorsunuz demektir. Muhtemelen daha fazla okumalısın. – svick

cevap

6

TaskFactory.FromAsync kullanarak sarmayı başarabileceğiniz bir BeginGetScannedDocuments ve EndGetScannedDocuments almalısınız. how to use task wrappers with old-school (pre-4.5) WCF'u (hem sunucuda hem de istemcide) gösteren bir blog yayınım var.

+0

Skeet'in bazı yardımlarıyla bunu başka bir iş parçacığıyla çözdüm, bu çok şeyi basitleştiren + istediğim kadar çok parametre kullanmama izin verdi. Yine de bir cevap olarak işaretlenmiş :) –

İlgili konular