2017-06-27 1 views
-1

Gibt es eine system.threading-Funktion, die es mir ermöglichen würde, zurückzukehren, ob eine asynchrone Funktion noch ausgeführt wird?Zurückgeben einer Liste der aktuell ausgeführten asynchronen Ereignisse

Ich möchte den Benutzer daran hindern, die Anwendung zu beenden, wenn eine asynchrone Funktion noch ausgeführt wird (oder sie zumindest vor dem Beenden auffordert).

Ich erstelle asynchrone Funktionen als Aufgaben und erwarte sie im Code, um zu verhindern, dass die Benutzeroberfläche gesperrt wird.

Wenn ich eine einfache bool isAsyncRunning machen könnte, hätte ich die Funktionalität, die ich suche.

Dank

+1

Irgendwie? Sicher. Behalte sie selbst im Auge. Das wird sicher funktionieren. Deine Frage ist zu weit gefasst. Recherchieren Sie, versuchen Sie etwas, wenn Sie auf ein _spezifisches Problem stoßen, dann überlegen Sie, eine Frage zu stellen. Lesen Sie unbedingt [ask] sowie weitere Anleitungen in der [Hilfe] (https://stackoverflow.com/help/asking) –

+0

Wie in der Frage speziell angegeben: Ich suchte nach einer Threading-Bibliothek-Implementierung und ohne mich selbst zu verfolgen. Danke für die Fragenempfehlungen. – Mitchell

+0

_ "Ich suchte nach einer Implementierung der Threading-Bibliothek" _ - mit diesem Ziel gibt es viele Probleme, nicht zuletzt, dass asynchrone Operationen nicht mit Threads identisch sind. Es gibt viele unterschiedlich implementierte asynchrone APIs in .NET, die sich voneinander unterscheiden und unterschiedliche zugrunde liegende Mechanismen verwenden. Mit der Weiterentwicklung von .NET sind auch asynchrone APIs abstrakter geworden. wir haben z.B. das 'Task'-Objekt, das einer beliebigen Anzahl verschiedener asynchroner Abstraktionen zugeordnet werden kann. IMO Ihre Anfrage ist einfach nicht machbar, aber selbst wenn es möglich ist, müssen Sie die Frage beschränken –

Antwort

0

Es hängt wirklich davon ab, welche API Sie verwenden, aber für Aufgaben können Sie sie in einer synchronisierten beobachtbaren Sammlung speichern und sie entfernen, wenn sie abgeschlossen sind, dann dem Benutzer die Sammlung anzuzeigen, die Sie jederzeit wollen . Sie können sie sogar in ein Tupel von Zeilenumbrüchen einfügen, um einen Anzeigenamen für sie zu speichern, und können dem Benutzer erlauben, sie bei Bedarf zu löschen.

+0

Danke, ich erstelle einfach asynchrone Methoden und während ich eine Warteschlange benutze, um einige der Daten zu speichern, auf die zugegriffen wird, habe ich irgendwie gehofft, eine boolesche IsAsyncRunning-Methode zu finden? Würde ich die Threading-Klasse für diese Art von Funktionalität durchsehen? Auch für die Async-Funktionen verwende ich Task für sie. – Mitchell

+1

Task.TaskStatus sollte es tun. Obwohl die ultimative Lösung eine Fortführung beinhaltet, die ein Wrapper-Objekt aktualisiert, das den Namen Ihrer Aufgabe, die Aufgabe selbst und ihren Status enthält, wenn sie abgeschlossen ist und dieser Wrapper INotifyPropertyChanged implementiert, damit er eine Benutzeroberfläche bei einer Änderung der Aufgabe benachrichtigen kann. Die Fortsetzung müsste auch die Aufgabe aus der synchronisierten Liste der laufenden Aufgaben entfernen. – hoodaticus

+1

Hoodaticus, nur um zu verdeutlichen, wie ich immer noch versuche zu verstehen, wie Async-Methoden nicht mit Threading "verwandt" sind (ich denke, es müsste zumindest hinter den Kulissen sein) ...Gilt das genauso für meine öffentliche async-Task somethingRunning() -Methoden? Ich werde es versuchen, aber jede Klärung wäre großartig. – Mitchell

Verwandte Themen