FromAsync
предоставляет удобный механизм, использующий методы BeginXxx
и EndXxx
модели асинхронного программирования (APM) для создания Task
.
Полученного результата.Task
по умолчанию будет выполняться в потоке пула потоков (и ваш последующий вызов SomeCode1()
действительно будет выполняться в текущем потоке параллельно Task
).
ContinueWith
метод в Task
действительно действует скорее как обратный вызов, то есть делегат, предоставленный этому методу, будет выполняться после завершения задачи, также в некотором потоке пула потоков. не блокирует текущий поток.
Действительно, вы должны настроить это продолжение при создании задачи, например,
var task1 = Task<int>.Factory.FromAsync(Foo1, ...).ContinueWith(Foo2,...);
Для получения более общей и подробной информации оПотоки в .NET Я настоятельно рекомендую прочитать хороший текст, такой как часть V CLR через C # .