バックグラウンドで実行されている非同期機能があります。この関数は、TCPを介してデータをポーリングします。私は現在の値を取得し、json
形式で戻る別の関数GetClientNameById
を持っています。しかし、すべての値に対してNULLを取得しています。途中で中断し、値を取得し、ポーリングを再開するにはどうすればよいですか?以下は私のコードです。割り込みと非同期
class Poll
{
public string A { get; set; }
public string B { get; set; }
public string C { get; set; }
public string D { get; set; }
public string E { get; set; }
}
public async void Polling(CancellationToken token)
{
await Task.Run(() =>
{
if (token.IsCancellationRequested)
{
return;
}
while (true)
{
if (token.IsCancellationRequested)
{
return;
}
//TODO
poll.A = reply1;
poll.B = reply2;
poll.C = reply3;
poll.D = reply4;
poll.E = DateTime.Now.ToString("HH:mm:ss.fff");
}
});
}
Poll poll = new Poll();
public string GetClientNameById(string Id)
{
string json = "";
if (Id == "Poll")
{
Console.WriteLine("Reply: " + poll.A + " " + poll.B + " " + poll.C + " " + poll.D + " " + poll.E);
json = JsonConvert.SerializeObject(poll, Formatting.None, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore, Formatting = Formatting.Indented });
}
return json;
}
'poll'変数はどこで宣言されインスタンス化されていますか? –
そして、同じインスタンスが 'Polling'関数と' GetClientNameById'の間で共有されていることを確認しましたか?また、デバッグ中にコードが4つのプロパティを設定している 'Polling'の場所に到達したことを確認しましたか?そして、このコードに達して実行されると、 'GetClientNameById'の中でそれらの4つのプロパティがnullであることを確認しましたか? –
@DarinDimitrov sry。私の悪い。私はあなたの質問を誤解しました。 'poll'は' GetClientNameById'の上に宣言されます – active92