public async Task TestManyWaiters() { var responseDispatcher = new ResponseDispatcher(); var tasks = new List <Task <string> >(); var item_r = responseDispatcher.RegisterAwaiter("r"); var item_e = responseDispatcher.RegisterAwaiter("e"); var item_S = responseDispatcher.RegisterAwaiter("S"); tasks.Add(responseDispatcher.WaitForResultAsync(item_r, -1)); tasks.Add(responseDispatcher.WaitForResultAsync(item_e, -1)); tasks.Add(responseDispatcher.WaitForResultAsync(item_S, -1)); await Task.Delay(10); responseDispatcher.FeedMessage("S SParam"); responseDispatcher.FeedMessage("e eParam"); responseDispatcher.FeedMessage("r rParam"); Assert.AreEqual("rParam", tasks[0].Result); Assert.AreEqual("eParam", tasks[1].Result); Assert.AreEqual("SParam", tasks[2].Result); }
public async Task TestAsyncVersion(string prefix, string message) { var feedLine = prefix + " " + message; var responseDispatcher = new ResponseDispatcher(); var item = responseDispatcher.RegisterAwaiter(prefix); var taskAwaiter = responseDispatcher.WaitForResultAsync(item).GetAwaiter(); taskAwaiter.OnCompleted(() => { Assert.AreEqual(taskAwaiter.GetResult(), message); }); await Task.Delay(100); responseDispatcher.FeedMessage(feedLine); }