gpt4 book ai didi

c# - 创建同步方法的异步版本

转载 作者:行者123 更新时间:2023-12-04 00:23:09 25 4
gpt4 key购买 nike

我目前正在编写一个组件,其中我已经有一个从服务器下载文件的同步方法。这是签名:

public Stream DownloadFile(IData data)

现在我想要这个方法的异步版本并尝试了这个:

 public async Task<Stream> DownloadFileAsync(IData data)
{
Stream stream = null;
await Task.Run(() =>
{
DownloadFile(data);
});
return stream;
}

但 resharper 在 return stream; “expression is always null” 下向我展示了一条波浪线。有人可以告诉我我的代码有什么问题吗?

我想做的是在后台运行 DownloadFile 方法并将控制流返回给调用者。

编辑:这里是 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;

谢谢

最佳答案

最好的选择是使用异步 I/O 重写 DownloadFile() 方法,例如使用 HttpClient。

使用包装器使当前的 DownloadFile() 异步是没有意义的。
如果您在需求和给定的基础架构之间陷入困境,那么只需伪造它,同时造成最少的损害:

public Task<Stream> DownloadFileAsync(IData data)  // not 'async', just Task<>
{
return Task.FromResult(DownloadFile(data));
}

关于c# - 创建同步方法的异步版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47304079/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com