我有以下异步方法,它应该根据传递给方法的列表获取我需要的所有字符串:
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
}
答案 0 :(得分:3)
如何在此示例中使用ContinueWith
你没有。您使用await
:
var returnedStringList = await GetStrings(..);
foreach(var s in returnedStringList)
{
// do something with the string s
}
正如我在博客中描述的那样await
is superior in every way to ContinueWith
用于异步代码。