0

被调用函数如何让调用函数知道他已完成所有处理?

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 服务调用的文件并将所需的文件完全写入磁盘。

我希望这一切都有意义,很难让问题的措辞正确。

4

2 回答 2

2

您需要使用异步和等待。你可以写一个这样的函数:

private async void SomeFunction()
{
    // Do something
    await SomeOtherFunction();
    // Do something else
}

在您的情况下,这对于您无法控制其他功能的处理的 Web 服务访问特别有用。这里的关键字是async以及await表明该函数将涉及异步编程的信号。

请注意,此语法相对较新(C#5),但由于您没有在问题中标记任何特定版本的 .NET,我想我会给您最新和最好的;)。

于 2012-11-16T12:39:24.113 回答
1

您应该为此使用一些任务技术,如下所示

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.");
}
于 2012-11-16T12:39:40.700 回答