Избегайте syn c -over-asyn c .Result
для незавершенного Task
, потому что это ерунда в асинхронном программировании . Это может вызвать взаимоблокировки и сделать природу async
бесполезной.
В случае синхронного метода вызывающего вы можете, по крайней мере, сделать это
IProgress<string> status = new Progress<string>(s => MessageBox.Show(s));
Task.Run(async () =>
{
Stock entity = await Data.Create(new Stock { id = 2, name = "ok" });
foreach (var item in await Data.GetAll())
{
status.Report(item.name);
}
});
Progress
здесь просто выполняет обратный вызов в Поток пользовательского интерфейса. Избегайте обновления пользовательского интерфейса из потоков пула.
Но это не единственный способ решить эту проблему.
Если вы находитесь в обработчике событий, просто сделайте его async
и просто используйте await
inline без Task.Run()
и обратного вызова.
Также предлагаю переименовать методы в CreateAsync
и GetAllAsync
.