ThreadPool.SwitchTo
был удален предположительно, потому что это анит-паттерн.Подумайте, что произойдет, если возникнет исключение, прежде чем вы вернетесь к исходному контексту.Вы не можете использовать блок finally
в качестве меры противодействия, чтобы защититься от этого исключения и переключиться обратно, потому что await
не может появиться в finally
блоках.
public async void button1_Click(object sender, EventArgs e)
{
await ThreadPool.SwitchTo();
try
{
// Do something dangerous here.
}
finally
{
await button1.Dispatcher.SwitchTo(); // COMPILE ERROR!
}
}
Вы, конечно, можете разработать пользовательский ожидаемыйи ожидающие типы для достижения именно того, что было удалено.Однако гораздо лучше использовать Task.Run
1 , чем переключать контексты в середине потока через await
.