从下面考虑到 async/await 的(简化)接口开始,我想通过使用 LiteDB 数据库来实现它。
public interface IDataService
{
Task<User> GetUserAsync(int key);
}
不幸的是,LiteDB 目前不支持异步方法。所有方法都是同步的。
我尝试了以下方法,但后来遇到了一些问题(过程并没有真正等待任何原因)。在那之后,我读到你应该只Task.Run()
用于 CPU 绑定算法,因此不能用于数据库访问。
public Task<User> GetUserAsync(int key)
{
var task = Task.Run(() =>
{
return _users
.Find(x => x.Key == key)
.SingleOrDefault();
});
return task;
}
尽管我阅读了几篇博客文章和 SO 问题,但我仍然不清楚如何为基于同步 IO 的代码制作一个正确编写的可等待方法。
那么我怎样才能编写一个正确的等待方法呢?
注意:我无法更改界面。这是给的。