将异步任务中声明的变量带到不同的类
Posted
技术标签:
【中文标题】将异步任务中声明的变量带到不同的类【英文标题】:bring variable declared inside async task to different class 【发布时间】:2020-08-07 09:45:50 【问题描述】:我已经使用 newtonsoft.json 和 HttpClient 提取了一些信息:
public class Main
static async Task Main()
using(var client = new HttpClient()
url = "webapilink goes here";
var response = await client.GetStringAsync(url);
apiStuff(the class i used to match the JSON format) variableName =
JsonConvert.DeserializeObject<apiStuff>(response);
我想将变量“variableName”放到一个单独的类中,而对于我的生活,我无法弄清楚。尝试在 HttpClient 部分之外的任何地方使用它时出现错误。
【问题讨论】:
类不做任何事情,除非你调用一个方法。方法接受参数。例如,您可以将variableName
作为参数传递给类的方法(或其构造函数)。
您能否澄清一下“将变量 'variableName' 分配给单独的类”的结果?真的看不出将变量转换为类意味着什么......
你可能正在寻找这个:docs.microsoft.com/en-us/dotnet/csharp/language-reference/…
您需要重新访问 C# 中的范围...在方法内声明的任何内容都无法在该方法之外访问...这也适用于块范围...我建议您通过一些参数Main(ref apiStuff variableName)
...,然后在该方法中使用它...然后在您将使用此Main
方法的其他类中声明variableName
...
这不能返回你想要的变量吗?在 async/await 模式中,即static async Task<apiStuff> Main() ... do code ...; return variableName;
。如果你不需要,没有理由使用ref
。
【参考方案1】:
如前所述,如果您的异步方法不是异步的,它将返回 void
。但是可以重写它以返回apiStuff
的实例,以便其他方法(和其他类)可以获取apiStuff
的实例并使用它:
using System.Net.Http;
using System.Threading.Tasks;
using Newtonsoft.Json;
public class MainClass
public static async Task<apiStuff> Main()
using (var client = new HttpClient())
string url = "webapilink goes here";
var response = await client.GetStringAsync(url);
apiStuff variableName =
JsonConvert.DeserializeObject<apiStuff>(response);
return variableName;
public class SecondClass
public static async Task GetApiStuff()
apiStuff variableName = await MainClass.Main();
// do more work with variableName
public class apiStuff /* defined elsewhere */
如果这不是您要问的,请在原始问题中澄清。 (而且我假设该方法并没有真正命名为 Main
- 可能会令人困惑。)
【讨论】:
以上是关于将异步任务中声明的变量带到不同的类的主要内容,如果未能解决你的问题,请参考以下文章