它的东西之后,在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