В последнее время я столкнулся с довольно многими ситуациями, когда async
методы выполняются синхронно, но в любом случае возвращают задачу, поэтому их можно ожидать, например
public virtual Task CreateAsync(TUser user)
{
ThrowIfDisposed();
if (user == null) throw new ArgumentNullException("user");
Context.Save(user);
Context.Flush();
return Task.FromResult(0);
}
Разумеется, лучше отправить вероятную долговременную операцию в поток и вернуть все еще активную задачу, чтобы ее можно было ожидать:
public virtual Task CreateAsync(TUser user)
{
ThrowIfDisposed();
if (user == null) throw new ArgumentNullException("user");
return Task.Run(() =>
{
Context.Save(user);
Context.Flush();
});
}
Однако я подозреваю, что просто отключение потоков TPL - это не самая безопасная практика. Любой комментарий к этим двум различным шаблонам?