在考虑这个方法:使Task.Delay继续调用线程
//Called on a known thread
public async void ThreadSleep()
{
while(itemsInQueue)
{
//This call is currently on Thread X
await Task.Delay(5000);
//This needs to be on the thread that the method was called on
DoSomeProcessing();
}
}
我假设Task.Delay正在执行不同的线程异步并恢复该同一线程。这对我来说不是很明显。如何让方法继续使用线程X?
PS:该ThreadSleep方法执行在非UI线程
编辑:1)增加W.Brian的为了简化代码示例。
2)是的,这个例子就是......一个例子。
3)Thread.Delay的目的只是在处理之间添加一些延迟。
为什么你想继续在调用线程? – svick
不知道这是否只是一个人为的例子,但你应该只调用Task.Run来处理CPU繁重的操作。在这种情况下,你有一个纯粹的异步方法('Task.Delay()'),所以你应该等待它。使用方法签名'async void'而不是'async Task'也是不好的做法,除非你必须因为它是一个偶数句柄。 – kai
@svick:为什么我不想要它?数据同步为一个。重入问题。我可以想到为什么对一个方法的调用需要在预先确定的线程上的很多原因。 – bobbyalex