当前位置: 首页 > 编程语言 > C#

程序在等待时退出分享

时间:2023-04-10 15:25:20 C#

程序在等待时退出我有一个while循环,它应该重复程序直到满足特定条件。在这个循环中,我调用异步函数,它会为我打印一条消息。这是(缩短的)代码:privatevoidInitializeMessageSystem(){do{//DostuffawaitprintMessage("HelloWorld!");控制台.ReadKey();}while(condition!=true)}这里函数printMessage()privatestaticasyncTaskprintMessage(stringmessage,intspd=1){intdelay=50/spd;string[]words=message.Split('');整数索引=1;for(intword=0;wordConsole.WindowWidth){Console.WriteLine();索引=1;}for(intc=0;c而不是TResult。唯一的例外是事件处理程序privateasyncvoidButton1_Clicked(objectsender,...){varmyTask=SlowMultiplierAsync(4,3);//当myTask运行时你可以做其他事情//过一会儿你需要结果:inttaskResult=awaitmyTask;过程(任务结果);}privateasyncTaskSlowMultiplierAsync(intx,inty){//让我们在乘法之前小睡一下//通过等待另一个异步函数来做到这一点:awaitTask.Delay(TimeSpan.FromSeconds(5));返回x*y;如果您不想(或不能)使您的函数异步,您可以通过使用task.Run启动任务来模拟类似的行为:privatevoidInitializeMessageSystem(){do{//DostuffvarmyTask=task.Run(()=>printMessage("HelloWorld!"));我的任务。等待();控制台.ReadKey();}while(condition!=true)虽然这将确保您的函数在任务完成之前不会结束,但您的函数将是您的客户端的同步函数。例如,它不会使您的UI响应。在这里,stackoverflow上的Ericlippert曾经向我解释过异步和并发之间的区别。链接到他的回答假设你必须做早餐。烤面包并煮一些鸡蛋。以下代码执行时没有任何错误或警告。但是当您执行代码时,程序会静默退出。您可能期望程序等待任务完成,要求用户按任意键,然后退出。实际发生的是在执行await语句后控制返回到调用步骤。在我们的例子中,步骤等待任务;在任务完成之前执行,控制返回到调用步骤SomeTask();并退出程序。类程序{staticvoidMain(string[]args){SomeTask();}publicstaticasyncvoidSomeTask(){Tasktask=Task.Run(()=>{System.Threading.Thread.Sleep(20000);Console.WriteLine("TaskCompleted!");});等待任务;Console.WriteLine("按任意键退出");控制台.ReadLine();要解决此问题,请添加awaitSomeTask();call,以便程序等待异步SomeTask()完成。您还应该将SomeTask()的返回类型从void更改为Task。以上就是C#学习教程:程序在等待中退出,分享完所有内容。如果对大家有用,需要详细了解C#学习教程,希望大家多多关注---classProgram{staticvoidMain(string[]args){awaitSomeTask();}publicstaticasyncTaskSomeTask(){Tasktask=Task.Run(()=>{System.Threading.Thread.Sleep(20000);Console.WriteLine("任务完成!");});等待任务;Console.WriteLine("按任意键退出");控制台.ReadLine();}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: