我一直试图返回结果的string,但它没有返回任何东西。当我做Console.WriteLine时,它会显示链接。
但这句话:
s = nzk.Get<string>("link");什么都没做,我也不知道为什么。
这是我的密码:
public string getlink(String ID)
{
ParseClient.Initialize(new ParseClient.Configuration
{
ApplicationId = "xxxxxxxxxxxxxx5335c1fxxx0f19efxxxx06787e",
Server = "http://api.assintates.net/parse/"
});
string s = "";
ParseQuery<ParseObject> query = ParseObject.GetQuery("test");
query.GetAsync(ID).ContinueWith(t =>
{
ParseObject nzk = t.Result;
Console.WriteLine(nzk.Get<string>("link")); // this works
s = nzk.Get<string>("link");// this doesn't work
});
return s;
}
class Program
{
static void Main(string[] args)
{
g_get x = new g_get();
Console.WriteLine(x.getlink("iLQLJKPoJA")); // shows nothing since i initialized the s with ""
Console.ReadLine();
}
}发布于 2017-11-04 16:32:22
下面是一个演示您的问题的小示例:
static void Main(string[] args)
{
Console.WriteLine(GetString());
Console.ReadLine();
}
private static async Task TimeConsumingTask()
{
await Task.Run(() => System.Threading.Thread.Sleep(100));
}
private static string GetString()
{
string s = "I am empty";
TimeConsumingTask().ContinueWith(t =>
{
s = "GetString was called";
});
return s;
}您的输出如下:
I am empty为什么?需要处理的是ContinueWith()-function (参见msdn )。ContinueWith返回任务对象。你必须等待这个任务,在你的代码中你没有等待它。
所以简单的解决方案在任务对象上调用等。
string s = "";
ParseQuery<ParseObject> query = ParseObject.GetQuery("test");
query.GetAsync(ID).ContinueWith(t =>
{
ParseObject nzk = t.Result;
Console.WriteLine(nzk.Get<string>("link")); // this works
s = nzk.Get<string>("link");// this doesn't work
}).Wait();
return s;这里有关C#异步编程的更多信息。
编辑:更多信息
您将看到控制台输出,因为您的任务无论如何都会运行。但是它将在您返回字符串之后运行。
https://stackoverflow.com/questions/47112232
复制相似问题