首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不运行C#的延续

不运行C#的延续
EN

Stack Overflow用户
提问于 2014-07-02 17:36:54
回答 2查看 144关注 0票数 3

考虑以下代码

代码语言:javascript
复制
class Program
{

    static void Continue()
    {
        Console.Out.WriteLine("Continue t1"); 
    }

    static async Task AsyncStart()
    {
        Console.Out.WriteLine("AsyncStart"); 
        return;
    }

    static void Main(string[] args)
    {

        Task t3 = AsyncStart().ContinueWith((ant) => { Continue(); });

        Console.Out.WriteLine("BEFORE"); 
        Task.WhenAny(new Task[] { t3 });
        Console.Out.WriteLine("AFTER");
     }
 }

输出是

代码语言:javascript
复制
AsyncStart
BEFORE
AFTER
Press any key to continue . . .

继续运行!

是的,我知道AsyncStart不包含任何等待(CS1998),但是我仍然希望t3运行这个延续。我错过了一些非常基本的东西

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-02 17:41:39

在继续(在后台线程上运行)有机会运行之前,您的进程就结束了。

票数 7
EN

Stack Overflow用户

发布于 2014-07-03 03:09:59

Task.WhenAny返回一个Task,在这种情况下,您需要在async方法中执行await (Main不能标记为async)。或者,因为您是在控制台应用程序中,所以可以调用Task.WaitAll,这应该等待延续完成。在GUI应用程序中,WaitAll可能导致死锁,但在控制台应用程序中,这是可以的。

代码语言:javascript
复制
static void Main(string[] args)
{

   Task t3 = AsyncStart().ContinueWith((ant) => { Continue(); });

   Console.Out.WriteLine("BEFORE"); 
   Task.WaitAll(new Task[] { t3 });
   Console.Out.WriteLine("AFTER");
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24537570

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档