2012-11-22 94 views
0

我正在使用新的HttpClient類將一些數據上傳到服務器,因此我不得不使用像await/async這樣的新操作符。我有以下問題:如何阻止呼叫者線程等待,直到第一個文件將被上傳,然後移動到下一個。如何在等待操作員後阻止調用者線程

public async Task Upload(string filename) 
    { 
     HttpRequestMessage message = new HttpRequestMessage(); 

     StreamContent streamContent = new StreamContent(new FileStream(filename, FileMode.Open)); 
     message.Method = HttpMethod.Put; 
     message.Content = streamContent; 
     message.RequestUri = new Uri(webURI); 

     HttpResponseMessage response = await httpClient.SendAsync(message); 

     //I want to reach this point untill I will start to upload next file 
     if (response.IsSuccessStatusCode) 
     { 
      //do something 
     } 


    } 

    void uploadFiles() 
    { 
     foreach (string filename in filenames) 
     { 
      Upload(filename); 
     } 
    } 

感謝您對我的問題的任何關注。

回答

1

await你上傳一個文件之前的上傳完成:

async void uploadFiles() 
{ 
    foreach (string filename in filenames) 
    { 
     await Upload(filename); 
    } 
} 
+0

謝謝你,這就是我正在尋找。所以如果例如我有這樣的方法 - UploadFolder()調用UploadFiles(),最後這個例程調用Upload()我需要添加異步/等待運營商UploadFolder()和UploadFiles()以及? – Vlad

+0

如果你想知道什麼時候所有的上傳都完成了,把'async void uploadFiles()'改爲'async Task uploadFiles()',然後'await uploadFiles();'。 – dtb