我有遵循的async方法,该方法应该基于传递到该方法的列表中获取我需要的所有字符串:
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()完成任务完成后返回的列表?我想做这样的事情:
foreach(var s in returnedStringList)
{
// do something with the string s
}
如何在此示例中使用继续使用
你不。您使用await
:
var returnedStringList = await GetStrings(..);
foreach(var s in returnedStringList)
{
// do something with the string s
}
正如我在博客上描述的那样,await
在各种方面都优于ContinueWith
,对于异步代码。