Al momento disponiamo di un'interfaccia per un decodificatore video asincrono che gira su una propria thread. Fondamentalmente gli dai dei dati e alla fine ti richiamerà sul suo thread attraverso alcuni eventi, come in questo caso (non vero codice):
interface IDecoder {
void Decode(parameters);
event FrameReady;
event FrameDropped;
// lots of other possibilities
}
È un po 'complicato e mi piacerebbe convertirlo in un C # 5, versione basata su async, qualcosa del tipo:
interface IDecoder {
async Task<DecodeResult> DecodeAsync(parameters);
}
Dove DecodeResult avrà tutte le informazioni che altrimenti sarebbero state trasmesse tramite eventi, e il codice cliente può essere scritto in modo pulito con asincrono / attesa piuttosto che un pasticcio di gestori di eventi e invio di thread.
Comprendo che Task è pianificato sul ThreadPool per impostazione predefinita. Vogliamo che tutte le operazioni di decodifica avvengano in sequenza su un singolo thread specifico del decodificatore. Questo può essere ottenuto usando Task, se sì, come? Le attività sono appropriate anche per questo uso o c'è uno schema più ovvio che mi manca?