C#等待线程完成后再继续

时间:2019-07-30 14:33:26

标签: c# multithreading concurrency

我有以下简化代码:

object myVariable;
var myThread = new Thread(async () =>
{
   //Do something....
   myVariable = //Some result....
});
myThread.Start();

我在方法的第一行开始myThread。我的理解是,该线程随后将关闭并执行,而该方法的其余部分将同时执行。这是正确的吗?

然后,我到达代码的更下方,将使用myVariable。鉴于此,如果myThread尚未完成,我需要我的主线程暂停。

我的理解是,我可以使用myThread.Join()来做到这一点。但是,一旦我调用.Join,它将暂停主线程,直到myThread完成。

我的问题是,如果我这样做:

开始myThread

之后

执行其他需要x秒的代码

之后

致电myThread.Join()

在这种情况下,联接是否要等到到达该行代码后才会发生,例如,联接要等到x秒钟后才会发生?或者联接向前看吗?

我希望这个问题清楚吗?

2 个答案:

答案 0 :(得分:0)

我不知道我是否理解正确,但是我会尽力回答你。 要执行您想要的操作,可以使用类似以下内容的方法:

await someMethod().ContinueWith((task) =>
                {
                    someOtherMethodThatUsesTaskResult(task.Result);
                    //more code    

                }, TaskContinuationOptions.OnlyOnRanToCompletion);

当然,您可以探索最后一个参数可用的选项。

答案 1 :(得分:0)

在您的情况下,您可以使用关键字await(我认为适合您的情况更好):

var myTask = asyncTask(); // Launch the Task

// execute other code that takes x seconds

var myVariable = await myTask; // Get the result of the Task (and wait if it was not finished)