任务ContinuewWith等待返回错误

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'".

关于如何处理这个问题的任何线索?

SLa*_*aks 5

await关键字等待完成任务并返回结果.

它不会返回任务本身.

由于您ContinueWith()没有结果(它返回Task,而不是Task<T>),await表达式返回void,显然无法分配给变量.

您可以像这样简化代码:

await Task.Run(() => {
    using (...) {
        ...
    }
});
LogText("Done!");
Run Code Online (Sandbox Code Playgroud)