1

我正在尝试使用 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);
                        }
                    });

我没有保存文件,而是尝试按以下方式返回字节数组。但它不起作用。它返回空值。

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

有人可以纠正我吗?

谢谢

4

1 回答 1

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;
           ...

      }
于 2012-12-12T23:57:28.397 回答