カスタムイーサネットデバイスからデータを読み込むためのビジュアルスタジオ2015 c#プログラムを作成しました。データがスケジュールされた時間にすべて一緒に読み込まれるため、非同期命令を使用する必要があります。c#async await and exception
私は読取りデータ用にカスタム.NETライブラリを使用します。これは私のコードです:
private void timerPollingData_Tick(object sender, EventArgs e)
{
readDevice_01();
readDevice_02();
// and so on for all devices ...
}
private async void readDevice_01()
{
var result = await getDataDevice_01();
// Save data
}
private async void readDevice_02()
{
var result = await getDataDevice_02();
// Save data
}
private Task<string> getDataDevice_01()
{
MyCustomLibrary readDevice = new MyCustomLibrary.Master();
return Task.Factory.StartNew(() => readDevice.ReadHoldingRegister(... some parameters ...).ToString());
}
private Task<string> getDataDevice_02()
{
MyCustomLibrary readDevice = new MyCustomLibrary.Master();
return Task.Factory.StartNew(() => readDevice.ReadHoldingRegister(... some parameters ...).ToString());
}
私の疑問: 各タスクのハンドル例外のためのベストプラクティスは何ですか?どのデバイスがイーサネットから抜かれているのかを理解し、スイッチをオフにして、そこからデータを取得するために使用されたタスクを停止する必要があります。
ご協力いただきありがとうございます。
* 'async void'を使用しないでください。これはイベントハンドラ専用です。それを待つことも、例外をキャッチすることもできません。何も返さない場合は 'async Task'を使います。 –
@PanagiotisKanavos - TimerTickは優れた標準アドバイスですが、イベントハンドラです。したがって、2つの '非同期void'メソッドへの伝播は大きくはありませんが、どちらも間違っているわけではありません。 –
どのVisual Studioを知る必要はありませんが、これがWindowsサービスかWinFormsアプリケーションかどうかを教えてください。 –