2012-11-22 52 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