如何异步这个长时间运行的方法?

Mat*_*t W 3 .net c# asynchronous task-parallel-library async-await

我有这个方法,我想异步运行,以便我可以在运行时做其他事情.它不依赖于任何其他Async方法(它不会调用另一个资源,下载文件或任何东西).我想避免使用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;
}
Run Code Online (Sandbox Code Playgroud)

目前,我认为我需要将方法包装在lambda或Task中并将其标记为异步.等待去哪儿了?

i3a*_*non 8

你混淆了两件不同的事情.您可以在后台运行它,此方法可以是异步的.这些是两个不同的东西,你的方法可以做到,或两者兼而有之.

如果您在该方法中执行异步操作,例如Task.Delay或某些非阻塞I/O,则调用该方法,等待返回的任务并使该方法本身为异步:

async Task RunMySlowLogicAsync()
{
    while (true)
    {
        // ...
        await Task.Delay(1000);
    }
}
Run Code Online (Sandbox Code Playgroud)

如果你没有这样的东西,那么你的方法不是异步的,它是同步的.您仍然可以在另一个(ThreadPool)线程的后台运行它,同时使用Task.Run以下方法执行其他操作:

var task = Task.Run(() => RunMySlowLogic());
Run Code Online (Sandbox Code Playgroud)