我有以下异步方法,它应该根据传递给方法的列表获取我需要的所有字符串:
public async Task<List<string>> GetStrings(List selections)
{
List<string> myList = new List<string>();
TaskCompletionSource<List<string>> someStrings = new TaskCompletionSource<List<string>>();
// Register/deregister event that is fired on each selection.
// Once this event is received, I get its arguments from which I
// get string and add it to my list of strings.
// Once the list count matches number of selections passed into the method,
// TaskCompletionSource result is set.
EventHandler<IDataNotification> onCallThatFiresCompleted = null;
onCallThatFiresCompleted = (sender, e) =>
{
var myString = e.getString();
myList.Add(myString);
if (myList.Count == selections.Count)
{
MyObserver.DataNotification -= onCallThatFiresCompleted;
someStrings.TrySetResult(myList);
}
};
MyObserver.DataNotification += onCallThatFiresCompleted;
foreach (var sel in selections)
{
// This call fires onCallThatFiresCompleted event that when received
// will conteain string I need in its arguments.
CallThatFires_MyEvent();
}
return await someStrings.Task; //await for the task
}
任务完成后,此方法的调用者将如何使用 Task.ContinueWith() 处理返回的 List?我想做这样的事情:
foreach(var s in returnedStringList)
{
// do something with the string s
}