我创建了PCL库:这里代码:http://dumpz.org/1131545/。在这个PCL中,我创建了一个接口和类,该类用Task调用这个接口的方法。接下来,我添加了C#类库项目,添加了对pcl的引用,并实现了这个接口(http://dumpz.org/1131549/)。之后,我添加了ConsoleApp,添加了对PCL的引用,并添加了从C# CLP实现的文件链接。(http://dumpz.org/1131550/)
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中:
class Impl:test
{
public Impl()
{
}
public void test()
{
CookieContainer s = new CookieContainer();
}
}
控制台应用程序:
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("");
}
}
}
但是当我调用已实现的方法时,应用程序就会掉下来。请解释一下为什么?谢谢您抽时间见我。
发布于 2014-06-19 01:04:33
当您使用await
时,控制权将返回给调用方。在您的应用程序中,这意味着当您使用await s.Call()
时,控件返回到test
,这是Main
内部的最后一个方法,后者完成执行并关闭控制台应用程序。
您必须做的是在Wait
上显式地调用Task
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("");
}
}
https://stackoverflow.com/questions/24300728
复制