Kann Callback-Anrufe in IEnumerable umwandeln

8

Ich schreibe einen Wrapper um eine Bibliothek eines Drittanbieters und er hat eine Methode, die von ihm verwalteten Daten zu scannen. Die Methode verwendet eine Rückrufmethode, die für jedes Element in den gefundenen Daten aufgerufen wird.

z.B. Die Methode ist im Wesentlichen: void Scan(Action<object> callback);

Ich möchte es umbrechen und eine Methode wie IEnumerable<object> Scan();

verfügbar machen

Ist das möglich, ohne auf einen separaten Thread zuzugreifen, um den eigentlichen Scan und einen Puffer durchzuführen?

    
Gareth 10.02.2011, 10:01
quelle

5 Antworten

4

Das geht ganz einfach mit Reactive:

%Vor%

Denken Sie daran, dass dies Dinge wie Abbruch nicht kümmert, da die Callback-Methode es nicht wirklich erlaubt. Eine angemessene Lösung würde eine Arbeit seitens der externen Bibliothek erfordern.

    
porges 10.02.2011, 11:02
quelle
4

Sie sollten das Rx-Projekt untersuchen. Dadurch kann eine Ereignisquelle als% co_de verwendet werden %.

Ich bin mir nicht sicher, ob Vanilla-Callbacks als solche dargestellt werden können (es zielt auf .NET-Events ab), aber es lohnt sich, einen regulären Callback als IEnumerable .     

Paul Ruane 10.02.2011 10:10
quelle
2

Hier ist ein blockierender Enumerator (die Scan-Methode muss in einem separaten Thread ausgeführt werden)

%Vor%

Du könntest es in eine einfache IEnumerable<Object> einfügen, aber ich würde es nicht empfehlen. IEnumerable lists bedeutet, dass Sie mehrere Enumeratoren in derselben Liste ausführen können, was in diesem Fall nicht möglich ist.

    
jgauffin 10.02.2011 11:15
quelle
0

Wie wäre es mit diesem:

%Vor%     
decyclone 10.02.2011 10:10
quelle
-1

Sehen Sie sich das Keyword yield an - Das wird Ihnen erlauben, eine Methode zu haben, die wie ein IEnumerable aussieht, aber die Verarbeitung für jeden Rückgabewert tatsächlich durchführt.

    
Dr Herbie 10.02.2011 10:05
quelle

Tags und Links