我正在尝试使用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;
有人可以纠正我吗?
由于
答案 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;
...
}