2017-02-15 1 views
0

の作品ではない:(が正解である?)それが動作するかどうかReadAsMultipartAsyncこの起こっているので、私は誰もが知っているかどうかを知りたい

[AcceptVerbs("POST")] 
public void AddFile() 
{ 
    if (!Request.Content.IsMimeMultipartContent("form-data")) 
    { 
     throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType); 
    }    

    var streamProvider = new MultipartFormDataMemoryStreamProvider(); 
    Request.Content.ReadAsMultipartAsync(streamProvider).ContinueWith(t => 
    { 
     .... 
    }); 
} 

しかし、この:

これではない作品:

[AcceptVerbs("POST")] 
public Task AddFile() 
{ 
    if (!Request.Content.IsMimeMultipartContent("form-data")) 
    { 
     throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType); 
    }    

    var streamProvider = new MultipartFormDataMemoryStreamProvider(); 
    return Request.Content.ReadAsMultipartAsync(streamProvider).ContinueWith(t => 
    { 
     .... 
    }); 
} 

答えて

0

最初の例では、返された仕事をReadAsMultipartAsyncから歌います。メソッドはすぐに終了します。

2番目の例では、タスクをベースクラスに渡します。このクラスは、タスクを処理し、実行を待機します。

タスクを返すことを望まない場合は、次のようにします。それが終了した後、あなたが何かをしたい場合は、タスクとても似asyncawaitとしてあなたの方法をマークすることができますContinueWithと非同期をミキシング

[AcceptVerbs("POST")] 
public async Task AddFile() 
{ 
    if (!Request.Content.IsMimeMultipartContent("form-data")) 
    { 
     throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType); 
    }    

    var streamProvider = new MultipartFormDataMemoryStreamProvider(); 
    await Request.Content.ReadAsMultipartAsync(streamProvider).ContinueWith(t => 
    { 
     .... 
    }); 
} 
+1

/ちょうど 'がRequest.Content.ReadAsMultipartAsyncを(待ってください、問題のリードを待ちますstreamProvider); '' .ContinueWith'のすべては、通常のコードのように 'await'の後に置かれます。 –

+0

しかし、私は.NET 4.0を使用しており、これを行うことはできません。私はそれがより良い使用を返すと信じています。 – Cristian18

+0

返品があれば問題ありません。そうでなければ、このパッケージを見ることができます。基本的に.NET 4.0にasync/awaitサポートを追加します。www.nuget.org/packages/Microsoft.Bcl.Async –

関連する問題