2017-11-04 7 views
1

私は結果のstringを返そうとしていますが、何も返しません。私がConsole.WriteLineをすると、リンクが表示されます。Parse .net SDK Get Object

しかしライン:

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

    } 
} 
+0

アプリケーションで 'getlink'をどのように消費しますか?あなたはいくつかの詳細を提供できますか? – Link

+0

コードを編集しました:) –

答えて

1

はあなたの問題を実証するための少しの例である:

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は、あなたにタスクオブジェクトを返します。あなたはこの作業を待つ必要があり、あなたのコードではそれを待っていませんでした。

あなたのタスクオブジェクトには、単純なソリューションコール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#での非同期プログラミングに関するものです。

編集:あなたのタスクは、とにかく実行されますので、いくつかのより多くの情報

は、コンソール出力が表示されます。しかし、それはあなたの文字列を返した後に実行されます。

+0

ああ、ありがとう、申し訳ありません。私はまだJavaからシフトしたので、まだC#を学んでいます。ありがとうございました !! –

関連する問題