解析 .net SDK 获取对象

Parse .net SDK Get Object

我一直在尝试 return 结果的 string 但它没有 return 任何东西。当我做 Console.WriteLine 它显示 link.

但是行:

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();

    }
}

这里有一个小例子来说明你的问题:

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() 函数(参见 msdn)。 ContinueWith returns 你是任务对象。您必须等待此任务,而在您的代码中您没有等待它。

在您的任务对象上调用 wait 如此简单的解决方案。

    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;

Here 有关 C# 异步编程的更多信息。

编辑:更多信息

您将看到控制台输出,因为您的任务无论如何都是 运行。但在您返回字符串后它将是 运行。