現在、サーバーからファイルをダウンロードする同期メソッドがあるコンポーネントを作成しています。ここに署名があります:同期メソッドの非同期バージョンを作成する
public Stream DownloadFile(IData data)
今私は、このメソッドの非同期バージョンを持っていると思ったし、これを試してみました:
public async Task<Stream> DownloadFileAsync(IData data)
{
Stream stream = null;
await Task.Run(() =>
{
DownloadFile(data);
});
return stream;
}
をしかしReSharperのは、「式は常にnullである」return stream;
の下で私の波線ラインを示しています。誰かが自分のコードに何が間違っているか教えてもらえますか?
私がやりたいことは、バックグラウンドでDownloadFileメソッドを実行し、呼び出し側にコントロールフローを返すことです。
EDIT:ここDownloadFileメソッドは次のとおりです。
var ms = new MemoryStream();
using (var dtService = new DataTransferService(mConnectionInfo))
{
int bytesRead;
do
{
var buffer = new byte[data.ChunkSize];
bytesRead = dtService.Read(data, buffer);
if (bytesRead == 0)
{
break;
}
data.Offset += bytesRead;
ms.Write(buffer, 0, buffer.Length);
} while (bytesRead > 0);
}
return ms;
おかげ
をあなたは、ストリームを保存し、それを返さないあなたはこれだけを返しますヌルです;ヌルです – EpicKip
[C#で同期メソッドから非同期メソッドを呼び出す方法?](https://stackoverflow.com/questions/9343594/how-to-call-asynchronous-method-from-synchronous- method-in-c) – Liam
あなたがしようとしているのは、非同期のアンチパターンの同期です。[これをしないでください](http://blog.stephencleary.com/2012/07/dont-block-on-async- code.html)。非同期の全ポイントはどこにでも実装する必要があるということです。 – Liam