它的東西之後,在UI線程中運行。我確定通過在等待之後爲UI線程和線程獲取Thread.CurrentThread.ManagedThreadId,並且UI線程變得無法響應。異步長阻塞方法等待周圍
那我該怎麼辦?我應該以傳統方式使用線程而不是依賴異步/等待?或者是否有辦法讓它在等待之後在新的非UI線程中運行?
它的東西之後,在UI線程中運行。我確定通過在等待之後爲UI線程和線程獲取Thread.CurrentThread.ManagedThreadId,並且UI線程變得無法響應。異步長阻塞方法等待周圍
那我該怎麼辦?我應該以傳統方式使用線程而不是依賴異步/等待?或者是否有辦法讓它在等待之後在新的非UI線程中運行?
但問題是,它仍然在等待之後在UI線程中運行。
是的,它會。這是async
/await
整點的一半 - 您可以回到正確的上下文中。
這聽起來像你真的應該開始一個新的線程(或最好是,使用Task<T>
)的後臺操作,如果你無法避免阻塞IO。然後你可以使用的導致異步方法:
async Task Foo(...)
{
string result = await Task.Run(...);
// Now update the UI with the result
}
你可以用你的「長阻塞I/O語句」到另一個awaitable,任務,方法返回並等待呢? – n8wrl