是否可以在后台运行函数而不返回调用线程?

时间:2017-06-14 18:06:21

标签: c# uwp

我需要调用一个函数才能在后台运行,但是当它完成时它应该“停止”而不是在调用线程中继续。

目前我这样做:

Task.Run(() => { MyFunction(); });
/* next code line */

在这种情况下,代码在后台线程中启动MyFunction()并继续执行下一个代码行,而不等待MyFunction()完​​成(我想要的),但是当MyFunction()完​​成它时返回到调用线程,并继续从下一个代码行(我不想要的)。因此,下一个代码行执行两次:在启动MyFunction()后立即执行,并在MyFunction()完​​成后执行。

在MyFunction()完​​成任务后,我应该怎么做才能避免从下一个代码行运行代码?

编辑: 我想要的只是在后台执行MyFunction。我不需要等待 - 主代码应该只调用MyFunction()并进一步调用MyFunction()来完成。

1 个答案:

答案 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();
}

<强>输出

enter image description here