Вызов асинхронного метода с использованием Task.Run кажется неправильным?
Недавно я наткнулся на этот код, написанный подрядчиком, который у нас работал. Это либо чертовски умно, либо глупо (я думаю, что последнее, но я хотел получить второе мнение). Я не в массовом порядке до скорости наasync
await
.
В основном это работает так:
public bool Send(TemplatedMessageDto message)
{
return Task.Run(() => SendAsync(message))
.GetAwaiter()
.GetResult();
}
public async Task<bool> SendAsync(TemplatedMessageDto message)
{
//code doing stuff
var results = await _externalresource.DothingsExternally();
//code doing stuff
}
Теперь, как я понимаю, что сначалаTask.Run()
бессмысленно и неэффективно? и действительно должно быть:
public bool Send(TemplatedMessageDto message)
{
return SendAsync(message))
.GetAwaiter()
.GetResult();
}
public async Task<bool> SendAsync(TemplatedMessageDto message)
{
//code doing stuff
var results = await _externalresource.DothingsExternally();
//code doing stuff
}
Я также не уверен, что это действительно асинхронный метод, потому что он все еще будет ждать, верно? Я думаю, что единственным преимуществом (даже переписанным) является освобождение основного рабочего потока.
Может ли кто-нибудь подтвердить, что этой первой задачи не должно быть?