2013-06-07 12 views
5

Mam zdefiniowany interfejs w F #Jak zdefiniować interfejs async f #, który można zaimplementować w języku C#?

type IConnect = 
    abstract Update: seq<DataType> -> Async<bool> 

chciałbym innych aplikacji w tym samym AppDomain wdrożyć go tak, że mogę zadzwonić Aktualizacja na te, które implementują interfejs (wnoszę implementacje w pojemniku TinyIoC) . Zwrotny typ Async<bool> może wskazywać, czy aktualizacja zakończyła się powodzeniem, czy nie, bez konieczności oczekiwania na nią. Mogę też aktualizować aplikacje równolegle.

Inne aplikacje napisane są w języku C# i kiedy zacząłem pisać implementację referencyjną (makiety), zdałem sobie sprawę, że wymagałoby to dowolnego implementatora, aby użyć typu FSharpAsync, który nie jest zbyt ładny.

Jak zdefiniować interfejs, aby można go było łatwo wdrożyć w języku C# i zachować aspekty asynchroniczne?

Odpowiedz

3

Użyj Task lub może IObservable. Możesz konwertować pomiędzy przepływami pracy async i Task<T>quiteeasily i jest to prosty typ do pracy z C# lub większością języków .Net.

type IConnect = abstract Update: seq<DataType> -> Task<bool> 
+0

Dziękuję 'Async.AwaitTask: Zadanie <'a> -> asynchroniczny <'a>' wydaje się działać prawidłowo – Remko

Powiązane problemy