这个人为的例子大致是我的代码的结构:
public abstract class SuperHeroBase { protected SuperHeroBase() { } public async TaskFightCrimeAsync() { var result = new CrimeFightingResult(); result.State = CrimeFightingStates.Fighting; try { await FightCrimeOverride(results); } catch { SetError(results); } if (result.State == CrimeFightingStates.Fighting) result.State = CrimeFightingStates.GoodGuyWon; return result; } protected SetError(CrimeFightingResult results) { result.State = CrimeFightingStates.BadGuyWon; } protected abstract Task FightCrimeOverride(CrimeFightingResult results); } public enum CrimeFightingStates { NotStarted, Fighting, GoodGuyWon, // success state BadGuyWon // error state } public class CrimeFightingResult { internal class CrimeFightingResult() { } public CrimeFightingStates State { get; internal set; } }
现在我正在尝试构建一个可以容纳多个SuperHero对象并提供AllHerosFightCrime
方法的集合.英雄不应该一次全部战斗(下一个在第一个完成时开始).
public class SuperHeroCollection : ObservableCollection{ public SuperHeroCollection() { } // I mark the method async... public async IObservable AllHerosFightCrime() { var heros = new List (this); var results = new ReplaySubject (); foreach (var hero in heros) { // ... so I can await on FightCrimeAsync and push // the result to the subject when done var result = await hero.FightCrimeAsync(); results.OnNext(result); } results.OnCompleted(); // I can't return the IObservable here because the method is marked Async. // It expects a return type of CrimeFightingResult return results; } }
我该如何归还IObservable
仍然有FightCrimeAsync
等待的电话?