2013-04-15 10 views
6

kullanarak: Ancakkoyun nesne Böyle bir şey kullanarak bir Görev içine AWS S3 zaman uyumsuz yöntemleri dönüştürmek istediğiniz .net asenk

using (var client = AWSClientFactory.CreateAmazonS3Client(accessKey, secretKey)) 
{ 
    var request = new PutObjectRequest(); 
    // ... set request properties ... 

    await Task.Factory.FromAsync<PutObjectRequest, PutObjectResponse>(
     client.BeginPutObject, 
     client.EndPutObject, 
     request, 
     null 
    ); 
} 

, aşağıdaki özel durum alıyorum:

System.ArgumentException: The IAsyncResult object was not returned from the corresponding asynchronous method on this class. 
Parameter name: asyncResult 
    at System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult) 
    at Amazon.S3.AmazonS3Client.getResponseCallback[T](IAsyncResult result) 
    at Amazon.S3.AmazonS3Client.endOperation[T](IAsyncResult result) 
    at Amazon.S3.AmazonS3Client.EndPutObject(IAsyncResult asyncResult) 
    at System.Threading.Tasks.TaskFactory`1.FromAsyncCoreLogic(IAsyncResult iar, Func`2 endFunction, Action`1 endAction, Task`1 promise, Boolean requiresSynchronization) 

FromAsync numaralı telefonumdan aradığım hata mı yanlış görünüyor?

P.S.

  • .NET Framework 4.5
  • AWSSDK sürüm 1.5.17.0
+1

Bence FromAsync'iniz doğru görünüyor. AWSSDK'deki bir hatadan şüphelenirim. –

+1

İstemci.BeginPutObject' ne döndürüyor? –

+0

FYI, bunu denedim. İşe yarıyor. Kod için teşekkürler yani Görev 'yerine 'IAsyncResult' döndüren bir şeyle karşılaşmadım! – Sethi

cevap

4

Ben aynı sorunu yaşıyorum. FromAsync çağrınız doğru. BeginPutObject/EndPutObject doğrudan FromAsync sarmalayıcı olmadan doğrudan çağrılırken aynı sorun var.

IAsyncResult asyncResult; 
asyncResult = invokePutObject(request, null, null, true); 
return EndPutObject(asyncResult); 

AmazonS3Client.BeginPutObject der ise:

return invokePutObject(request, callback, state, false); 

Not invokePutObject son boolean parametre

senkronize bir yöntem AmazonS3Client.PutObject() bu gövdeye sahiptir. Bu argüman 'senkronize' olarak adlandırılır. Senkronize = true ile çağırırsanız, (senkronize olarak işlemi gerçekleştirerek) çalışır. Eşzamanlı olarak yüklüyse = false, eşzamanlı yük altında, gönderdiğiniz istisnayı alırsınız.

AWS SDK'sinde, daha fazla araştırmaya ihtiyaç duyan bir hata açıkça görülüyor. AWS forumlarındaki This post benzer görünüyor, ancak aynı sorun olmayabilir; Eşzamanlı eşzamanlı yüklemeler işe yaradığından beri, oradaki yanıttan memnun değilim.

ETA: Net 4.5 gerektirir (yazılma sırasında beta) yeni AWS SDK sürüm 2.0, (Insted/EndFoo başlayın) doğal FooAsync yöntemleri vardır. Eski HttpWebRequest yerine yeni System.Net.HttpClient kütüphanesine dayanıyor. Neredeyse kesinlikle bu hata yok, ama henüz kendim test etmedim.

İlgili konular