我有这个方法,我想异步运行它,这样我就可以在它运行时做其他事情。它不依赖于任何其他异步方法(它不调用另一个资源、下载文件或任何东西)。如果可能,我想避免使用 new Task()
、Task.Factory.StartTask()
和 Task.Run()
。
是否可以异步运行此方法,使用整洁、可读的代码且无需显式使用 Task?
如果不是,异步运行该方法最简洁的方法是什么?
注意:请不要担心方法中的愚蠢逻辑 - 我已经将其归结为故意放慢但没有显示我的实际代码。
public static void main(string[] args)
{
RunMySlowLogic();
}
private void RunMySlowLogic()
{
while (true)
for (int i=0; i<100000000;i++)
if (i == new Random().Next(999))
return true;
}
目前,我认为我需要将方法包装在 lambda 或 Task 中并将其标记为异步。等待会去哪里?
最佳答案
你混淆了两个不同的东西。你可以在后台运行这个,这个方法可以是异步的。这是两件不同的事情,您的方法可以做其中一件,也可以同时做两件事情。
如果您在该方法中执行一些异步操作,例如 Task.Delay
或一些非阻塞 I/O,则调用该方法,等待返回的任务并使方法本身异步:
async Task RunMySlowLogicAsync()
{
while (true)
{
// ...
await Task.Delay(1000);
}
}
如果您没有这样的东西,那么您的方法就不是异步的,而是同步的。在使用 Task.Run
执行其他操作时,您仍然可以在不同 (ThreadPool
) 线程的后台运行它:
var task = Task.Run(() => RunMySlowLogic());
关于c# - 如何异步这个长时间运行的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32617702/