我需要调用一个函数才能在后台运行,但是当它完成时它应该“停止”而不是在调用线程中继续。
目前我这样做:
Task.Run(() => { MyFunction(); });
/* next code line */
在这种情况下,代码在后台线程中启动MyFunction()并继续执行下一个代码行,而不等待MyFunction()完成(我想要的),但是当MyFunction()完成它时返回到调用线程,并继续从下一个代码行(我不想要的)。因此,下一个代码行执行两次:在启动MyFunction()后立即执行,并在MyFunction()完成后执行。
在MyFunction()完成任务后,我应该怎么做才能避免从下一个代码行运行代码?
编辑: 我想要的只是在后台执行MyFunction。我不需要等待 - 主代码应该只调用MyFunction()并进一步调用MyFunction()来完成。
答案 0 :(得分:0)
您提供的代码已经完成了您希望它执行的操作。如果行为似乎不正确,您应该查看MyFunction
,看看它是否正在做您不想要的事情。
这是一个可重复的例子:
private static void Main()
{
Console.WriteLine("Starting new task...");
Task.Run(() =>
{
Console.WriteLine(" - Task says 'Hello'");
Thread.Sleep(TimeSpan.FromSeconds(3));
Console.WriteLine(" - Task says 'Goodbye'");
});
Console.WriteLine("This line should not run twice.");
Console.WriteLine("Going to sleep while waiting for our task to finish...");
Thread.Sleep(TimeSpan.FromSeconds(5));
Console.WriteLine("\nDone!\nPress any key to exit...");
Console.ReadKey();
}
<强>输出强>