Ich schrieb ein Visual Studio 2015 C# -Programm zum Lesen von einem benutzerdefinierten Ethernet-Gerät einige Daten. Ich muss Async-Anweisungen verwenden, da die Daten alle zu geplanten Zeiten gelesen werden.C# async erwarten und Ausnahme
Ich benutze eine benutzerdefinierte .NET-Bibliothek zum Lesen von Daten; dies ist mein Code:
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());
}
Meine Zweifel: was ist die beste Praxis für Griff Ausnahme der einzelnen Aufgaben? Ich muss verstehen, welche Geräte vom Ethernet getrennt werden oder ausschalten und dann den TASK STOPPEN, der verwendet wird, um Daten von ihm abzurufen.
Vielen Dank im Voraus für Ihre Hilfe.
* Verwenden Sie 'async void' NICHT, es ist nur für Event-Handler. Sie können es nicht abwarten oder Ausnahmen abfangen. Verwenden Sie 'async Task ', wenn Sie nichts zurückgeben möchten. –
@ PanagiotisKanavos - Gute Standard-Ratschläge, aber der TimerTick _ist_ ein Eventhandler. Die Verbreitung in zwei Async-Void-Methoden ist also nicht großartig, aber auch nicht völlig falsch. –
Wir müssen nicht wissen, welches Visual Studio, aber sagen Sie uns, ob dies ein Windows-Dienst oder WinForms oder ... Anwendung ist. –