gpt4 book ai didi

c# - 接口(interface)实现不提供async怎么办

转载 作者:太空狗 更新时间:2023-10-29 20:19:13 26 4
gpt4 key购买 nike

假设我有一个界面:

interface ILoader()
{
Task<Data> LoadAsync(int id);
}

我有这个接口(interface)的两个实现:

class NiceDataBase : ILoader 
{
public async Task<Data> LoadAsync(int id)
{
//this database has async way of fetching the data
return await NiceDataBaseDriver.LoadDataAsync(id);
}
}

class NotNiceDataBase : ILoader
{
public async Task<Data> LoadAsync(int id)
{
//this database's driver does not have aysnc methods, because it's old or done poorly.
return await Task.Run(() => NotNiceDataBaseDriver.LoadData(id));
}
}

NotNiceDataBase 不提供真正的异步方式来加载数据,这就是我实际上在新线程上运行它的原因,据我所知,这并不是真正的异步,因为真正的异步不使用新线程。那么我对 NotNiceDataBase 的实现是一个好的实现吗?让用户以为他正在运行真正的异步操作有点欺骗用户。

处理这种情况的最佳方法是什么?我认为 NotNiceDataBase 的客户端应该完全清楚自己在做什么,否则他无法很好地控制 hiw 应用程序的性能。

我的界面可以有额外的 Load 方法。但在这种情况下,这里的真正好处是什么? NotNiceDataBase 的 LoadAsync 仍然需要一些实现。我认为抛出 NotImplementedException 从来都不是一个好的解决方案。

最佳答案

如您所知,async 是一个实现细节,您不能在接口(interface)上定义 async。所以你所要做的就是

public class NotNiceDataBase : ILoader
{
public Task<Data> LoadAsync(int id)
{
//this database's driver does not have aysnc methods, because it's old or done poorly.
var result = NotNiceDataBaseDriver.LoadData(id);
return Task.FromResult(result);
}
}

关于c# - 接口(interface)实现不提供async怎么办,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52094928/

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