VAA*_*AAA 0 c# task-parallel-library async-await
我有以下代码使用 System.Threading.Tasks
private async void UploadDocument(System.IO.FileInfo fileInfo)
{
var someTask = await Task.Run<bool>(() =>
{
// open input stream
using (System.IO.FileStream stream = new System.IO.FileStream(FileTextBox.Text, System.IO.FileMode.Open, System.IO.FileAccess.Read))
{
using (StreamWithProgress uploadStreamWithProgress = new StreamWithProgress(stream))
{
uploadStreamWithProgress.ProgressChanged += uploadStreamWithProgress_ProgressChanged;
// start service client
FileTransferWCF.FileTransferServiceClient client = new FileTransferWCF.FileTransferServiceClient();
//FileTransferClient.FileTransferServiceClient client = new FileTransferClient.FileTransferServiceClient();
// upload file
client.UploadFile(fileInfo.Name, fileInfo.Length, uploadStreamWithProgress);
// close service client
client.Close();
}
}
return true;
}).ContinueWith(r =>{
if(r.Result) LogText("Done!!");
});
}
Run Code Online (Sandbox Code Playgroud)
如果我离开这个并尝试编译我得到:
"无法将void分配给隐式类型的局部变量"**
var someTask
所以我var someTask
改为Task someTask
但现在我得到了错误:
"不能隐式地将类型'void'转换为'System.Threading.Tasks.Task'".
关于如何处理这个问题的任何线索?
该await
关键字等待完成任务并返回结果.
它不会返回任务本身.
由于您ContinueWith()
没有结果(它返回Task
,而不是Task<T>
),await
表达式返回void
,显然无法分配给变量.
您可以像这样简化代码:
await Task.Run(() => {
using (...) {
...
}
});
LogText("Done!");
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1635 次 |
最近记录: |