gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 13:55:38 25 4
gpt4 key购买 nike

我有这个方法,我想异步运行它,这样我就可以在它运行时做其他事情。它不依赖于任何其他异步方法(它不调用另一个资源、下载文件或任何东西)。如果可能,我想避免使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com