foo.DoAsync внутри Task.Run — это Task.CompletedTask
поскольку он ожидает служебных данных Task.Run. Таким образом, он работает нормально.
когда я комментирую await Task.Delay(1_000);
foo.DoAsync внутри Task.Run сам по себе.
После первого попадания точки останова2 при отладке mode.
Он больше не достигает точки останова2.
Код: Выделить всё
internal class Foo
{
public Task DoAsync { get; set; }
public void Recursive()
{
// Breakpoint1
Recursive();
}
}
Код: Выделить всё
var foo = new Foo() { DoAsync = Task.CompletedTask };
//foo.Recursive();
Console.WriteLine($"Outer ThreadId: {Environment.CurrentManagedThreadId}");
var task = Task.Run(async () =>
{
Console.WriteLine($"Inner ThreadId: {Environment.CurrentManagedThreadId}");
// Breakpoint2
await foo.DoAsync;
Console.WriteLine("""
******
******
******
done
******
******
******
""");
});
await Task.Delay(1_000);
foo.DoAsync = task;
await foo.DoAsync;
Подробнее здесь: https://stackoverflow.com/questions/792 ... ntrol-flow
Мобильная версия