C# “C”;“本地”;在任务中加载的变量赢得';在任务外部调用时,不能保留其值

C# “C”;“本地”;在任务中加载的变量赢得';在任务外部调用时,不能保留其值,c#,asp.net,.net-4.0,scope,task,C#,Asp.net,.net 4.0,Scope,Task,我正在和这个绕圈子。我在HttpClient(.NET 4 with HttpClient package from NuGet)上有一些任务,在其中一个任务中,我试图为我在任务外部声明的变量赋值,在函数开始时,但当执行到该点时,变量丢失了赋值并返回到初始值,就像它从未更改一样。但我很确定,当执行通过任务时,它确实在某个时刻发生了变化 我制作了此屏幕截图以更轻松地显示: 我应该怎么做才能使我的xmlString将分配给它的值保留在任务内部,并在任务外部使用它 提前感谢您的帮助。从您的屏幕截图判

我正在和这个绕圈子。我在HttpClient(.NET 4 with HttpClient package from NuGet)上有一些任务,在其中一个任务中,我试图为我在任务外部声明的变量赋值,在函数开始时,但当执行到该点时,变量丢失了赋值并返回到初始值,就像它从未更改一样。但我很确定,当执行通过任务时,它确实在某个时刻发生了变化

我制作了此屏幕截图以更轻松地显示:

我应该怎么做才能使我的xmlString将分配给它的值保留在任务内部,并在任务外部使用它


提前感谢您的帮助。

从您的屏幕截图判断(如果您也提供了问题中的代码会更好),您永远不会等待您的任务。因此,上一次获取
xmlString
值的用法发生在任务完成执行之前,可能发生在
.ContinueWith()
分配变量之前


理想情况下,封闭方法也应该是异步的。然后你可以简单地等待它。否则,您可以尝试先调用
.ContinueWith(…).Wait()
方法,尽管此时您根本没有利用异步语义。

为什么不使用
Wait
?它使代码更加清晰。 将
client.GetAsync()
行替换为以下内容:

HttpResponse resp=wait client.GetAsync(par)

然后添加任务的try-catch部分。那么它应该按照您最初的预期工作

编辑:


Servy的评论有一半是对的。除此之外,您可能还需要手动添加。

此外,
Wait()
可能会死锁。@SLaks,是的,我知道,带着无限的悲伤和沮丧。:)如果您的任务计算一个结果,它应该将该结果分配给它的
结果
,而不是变异一个闭合变量。和HttpClient包。AFAIQ甚至在4.0上也包含异步定义。这意味着他有异步方法,但不使用
await
关键字。这两者结合在一起,你不能没有另一个。一个异步方法如果被调用,则需要一个
await
,除非它返回null。如果使用
await
,它所使用的方法也需要是异步的。事实上,上次我在4.0中帮助我的一个朋友使用异步的东西时,它自动抓取了MS,这使得使用await成为可能。不,它们不在一起。在C#5.0问世之前,C#拥有大量利用任务的异步方法。仅仅因为您有使用异步方法的库,并不意味着您可以访问
wait
。此外,您不需要使用
wait
来编写异步方法。你总是可以像所有人在
wait
存在之前那样做,也就是手动添加你自己的续集。