у меня есть этот код, чтобы получить данные из моей базы данных:задачи и многочисленные операции по контексту
public async Task<IEnumerable<Member>> GetAllMembersAsync()
{
var members = Repository.GetAll<Member>();
return await Task.Run(() => members.ToListAsync());
}
По неизвестной причине (? Может быть ошибка), я должен использовать Task.Run
для того, чтобы сделать эту работу (репозиторий просто возвращает DbSet<Member>
.Если я этого не сделаю, мой пользовательский интерфейс будет вечно вечно.
Проблема в том, что я не могу выполнять 2 операции с базой данных в то же время таким образом. Если я это сделаю, эта ошибка:
A second operation started on this context before a previous asynchronous operation completed. Use 'await' to ensure that any asynchronous operations have completed before calling another method on this context. Any instance members are not guaranteed to be thread safe.
Как вы видите, я уже использую await
.
Есть ли способ решить эту проблему, поэтому я могу на самом деле выполнить 2 операции с базой данных одновременно и поэтому они работают в порядке?
EDIT: код, который вызывает это:
private async void LoadMembers()
{
try
{
var members = await MemberService.GetAllMembersAsync();
Members = new ObservableCollection<Member>(members);
}
catch (EntityException)
{
// connection lost?
}
}
Можете ли вы показать код, который звонит ваш GetAllMembersAsync) '' метод (? –
Несомненно, я добавил его, спасибо :) – Bv202
Как использовать '.ContinueWith' для второго асинхронного вызова? Вам нужно будет начать еще одну задачу в продолжении, но по крайней мере эти задачи будут связаны друг с другом. Так много способов скинуть этот кот, хотя ... – code4life