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中并将其标记为异步.等待去哪儿了?
你混淆了两件不同的事情.您可以在后台运行它,此方法可以是异步的.这些是两个不同的东西,你的方法可以做到,或两者兼而有之.
如果您在该方法中执行异步操作,例如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)