我有以下简化代码:
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秒钟后才会发生?或者联接向前看吗?
我希望这个问题清楚吗?
答案 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)