被调用函数如何让调用函数知道他已完成所有处理?
myFunction1(){
myFunction2();
}
myFunction2(DownloadStringCompletedEventHandler callback){
// Calls a web service and updates local files
}
myFunction2Returned(object sender, DownloadStringCompletedEventArgs e){
}
像这样开始整个通话:
myFunction1();
// Continue processing here...
现在我想知道的是,如果我致电myFunction1()
,你怎么能等到myFunction2()
中的所有内容都已完成,然后再继续进行处理? (这就是'继续处理......'评论之外的任何谎言。)
问题是,在我调用myFuntion1()
之后,我尝试读取依赖myFunction2()
完成它的Web服务调用并完全将所需文件写入磁盘的文件。{/ p >
我希望这一切都有道理,很难让问题的措辞正确。
答案 0 :(得分:2)
您需要使用async和await。你可以写一个这样的函数:
private async void SomeFunction()
{
// Do something
await SomeOtherFunction();
// Do something else
}
与您的情况一样,这对于Web服务访问等特别有用,您无法控制其他功能的处理。这里的关键字是async
和await
,表示该函数将涉及异步编程。
请注意,这种语法相对较新(C#5),但由于你没有在你的问题中标记任何特定版本的.NET,我想我会给你最新最好的。)。
答案 1 :(得分:1)
您应该使用一些任务技术,something like this:
static void SimpleNestedTask()
{
var parent = Task.Factory.StartNew(() =>
{
// myFunction1 code here;
Console.WriteLine("Outer task executing.");
var child = Task.Factory.StartNew((t) =>
{
// myFunction2 code here
// Calls a web service and updates local files
Console.WriteLine("Nested task completing.");
}, TaskCreationOptions.AttachedToParent | TaskCreationOptions.LongRunning);
});
parent.Wait();
Console.WriteLine("Outer has completed.");
}