Я пытаюсь получить мою голову вокруг этого кода:Ожидание пустой задачи закручивает навсегда (ждут новые задачи (() => {}))
[TestFixture]
public class ExampleTest
{
[Test]
public void Example()
{
AwaitEmptyTask().Wait();
}
public async Task AwaitEmptyTask()
{
await new Task(() => { });
}
}
Метод Example
никогда не заканчивается и блоки навсегда. Почему?
затруднительное (от Stubbing Task returning method in async unit test), чтобы заменить await new Task(() => {})
с return Task.FromResult<object>(null);
, но опять же, почему это необходимо?
Я знаю, что есть куча вопросов, подобных этому, но никто, что я видел, кажется, объяснить, почему это происходит:
- Await method that returns Task - spins forever?: Я включил
await
ключевое слово AFAIK правильно - Stubbing Task returning method in async unit test: Не объясняет почему.
- Why will an empty .NET Task not complete if started and waited for from a static constructor?: Я не работает в статическом контексте, и, насколько я могу сказать, контекст соответствует
- Async methods return null: также дает решение, но не объясняет, почему
- async await return Task: обсуждается
Task.FromResult
, но не почемуawait new Task(() => {})
не работает
Я предлагаю вам использовать 'Task.Factory.StartNew', чтобы не забыть запустить задачу. –
@AlexJoukovsky. Я предлагаю, чтобы он не использовал' Task.Factory.StartNew' и вместо этого использовал 'Task.Run'. [Есть проблемы с использованием StartNew] (http: // blog.stephencleary.com/2013/08/startnew-is-dangerous.html). –
Почему голос? –