C#异步方法用法

时间:2012-12-12 23:52:28

标签: c# c#-4.0 async-await

我正在尝试使用Aync方法。它在某种程度上起作用。但它并没有在其他方面发挥作用。

工作示例

dropBox.DownloadFileAsync(csvEntry.Path)
                    .ContinueWith(task =>
                    {
                        // Save file to "C:\Spring Social.txt"
                        using (FileStream fileStream = new FileStream(tempCsvPath, FileMode.Create))
                        {
                            fileStream.Write(task.Result.Content, 0, task.Result.Content.Length);
                        }
                    });

我试图以下列方式返回字节数组,而不是保存文件。但它不起作用。它返回null。

 byte[] returnArray = null;
                dropbox.DownloadFileAsync(filePath)
                        .ContinueWith(task =>
                        {
                            returnArray = new byte[task.Result.Content.Length];
                            task.Result.Content.CopyTo(returnArray, 0);
                        });
                return returnArray;

有人可以纠正我吗?

由于

1 个答案:

答案 0 :(得分:4)

在此代码中:

            byte[] returnArray = null;
            dropbox.DownloadFileAsync(filePath)
                    .ContinueWith(task =>
                    {
                        returnArray = new byte[task.Result.Content.Length];
                        task.Result.Content.CopyTo(returnArray, 0);
                    });
            return returnArray;

在线程上执行DownloadFileAsync()。当执行ContinueWith()时,调用DowloadFileAsync()的函数已经返回。

你需要做这样的事情:

     Task<T> Download(string filePath)
     {             
            return dropbox.DownloadFileAsync(filePath)
                    .ContinueWith(task =>
                    {
                        returnArray = new byte[task.Result.Content.Length];
                        task.Result.Content.CopyTo(returnArray, 0);

                        return returnArray;
                    });
      }

这样称呼:

     var task = Download("myfile");

     task.ContinueWith(t => 
      { 
           var returnArray = t.Result;
           ...

      }
相关问题