Начиная со следующего (упрощенного) интерфейса, который имеет в виду асинхронность / ожидание, я хочу реализовать его с помощью базы данных LiteDB.
public interface IDataService
{
Task<User> GetUserAsync(int key);
}
К сожалению, LiteDB в настоящее время не поддерживает асинхронные методы. Все методы являются синхронными.
Я попробовал следующее, но позже столкнулся с некоторыми проблемами (процесс действительно не ожидал по какой-либо причине). После этого я прочитал, что вы должны использовать Task.Run()
только для алгоритмов, связанных с процессором, и, следовательно, не для доступа к базе данных.
public Task<User> GetUserAsync(int key)
{
var task = Task.Run(() =>
{
return _users
.Find(x => x.Key == key)
.SingleOrDefault();
});
return task;
}
Несмотря на то, что я прочитал несколько статей в блоге, а также вопросы SO, мне все еще неясно, как сделать правильно написанный ожидаемый метод для кода на основе синхронного ввода-вывода.
Так, как я могу написать правильно ожидаемый метод?
Примечание: я не могу изменить интерфейс. Это дано.