0

使用する次のコードがあります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!!");
    });

}

これを残してコンパイルしようとすると、次のようになります。

「暗黙的に型指定されたローカル変数に void を割り当てることはできません」** var someTask

だから私は次に変更var someTaskTask someTaskますが、今はエラーが発生します:

「タイプ 'void' を 'System.Threading.Tasks.Task' に暗黙的に変換することはできません」.

これに対処する方法の手がかりはありますか?

4

1 に答える 1

6

awaitキーワードは、タスクが終了するのを待って結果を返します

タスク自体は返されません。

あなたにContinueWith()は結果がないため ( ではTaskなくを返しますTask<T>)、await式は を返しますがvoid、これは明らかに変数に代入できません。

次のようにコードを単純化できます。

await Task.Run(() => {
    using (...) {
        ...
    }
});
LogText("Done!");
于 2013-02-25T19:19:29.017 に答える