首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >C#应用程序在PCL中使用任务时会下降

C#应用程序在PCL中使用任务时会下降
EN

Stack Overflow用户
提问于 2014-06-19 07:09:13
回答 1查看 128关注 0票数 0

我创建了PCL库:这里代码:http://dumpz.org/1131545/。在这个PCL中,我创建了一个接口和类,该类用Task调用这个接口的方法。接下来,我添加了C#类库项目,添加了对pcl的引用,并实现了这个接口(http://dumpz.org/1131549/)。之后,我添加了ConsoleApp,添加了对PCL的引用,并添加了从C# CLP实现的文件链接。(http://dumpz.org/1131550/)

代码语言:javascript
代码运行次数:0
运行
复制
namespace PortableClassLibrary1
{
public interface test
{
    void test();
}
public class Class1
{
    test Test;
    public Class1(test Test)
    {
        this.Test = Test;
    }
    public Task<bool>  Call()
    {
        return Task.Factory.StartNew(() =>
        {
            try
            {
                Test.test();
                return true;
            }
            catch(Exception ex)
            {
                return false;
            }
        });

    }
}
}

在C# CLP中:

代码语言:javascript
代码运行次数:0
运行
复制
class Impl:test
{
    public Impl()
    {

    }
    public void test()
    {
        CookieContainer s = new CookieContainer();
    }
}

控制台应用程序:

代码语言:javascript
代码运行次数:0
运行
复制
 class Program
{
    static Class1 s;
    static void Main(string[] args)
    {
        s = new PortableClassLibrary1.Class1(new Impl());
        test();
    }

    static async void test()
    {
        bool x = await s.Call();
        if(x == true)
        {
            Console.WriteLine("test");
        }
        else
        {
            Console.Write("");
        }
    }
}

但是当我调用已实现的方法时,应用程序就会掉下来。请解释一下为什么?谢谢您抽时间见我。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-19 09:04:33

当您使用await时,控制权将返回给调用方。在您的应用程序中,这意味着当您使用await s.Call()时,控件返回到test,这是Main内部的最后一个方法,后者完成执行并关闭控制台应用程序。

您必须做的是在Wait上显式地调用Task

代码语言:javascript
代码运行次数:0
运行
复制
class Program
{
   static Class1 s;
   static void Main(string[] args)
   {
       s = new PortableClassLibrary1.Class1(new Impl());
       test().Wait();
}

static async Task test()
{
    bool x = await s.Call().ConfigureAwait(false);
    if(x == true)
    {
        Console.WriteLine("test");
    }
    else
    {
        Console.Write("");
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24300728

复制
相关文章

相似问题

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