【发布时间】:2013-11-21 04:45:09
【问题描述】:
我正在开发 WCF 客户端应用程序,并且遇到了等待/异步模式的困难。 似乎该行: 等待客户端.LongOperationAsync(); 总是阻塞。据我了解,线程应该退出并继续到 Main() 方法,然后在异步方法完成时返回,也许我错了。
下面代码的输出是(总是):
测试()开始
测试()错误
*
*
*
...
Test() 方法总是在上下文返回到 main 之前 完成。任何想法将不胜感激。
static void Main(string[] args)
{
Program p = new Program();
p.Test();
while (true)
{
Console.WriteLine("*");
Thread.Sleep(500);
}
}
private async Task Test()
{
Console.WriteLine("Test() started");
try
{
MySoapClient client = new MySoapClient(
new BasicHttpBinding(new BasicHttpSecurityMode()),
new EndpointAddress("http://badaddress"));
await client.LongOperationAsync();
Console.WriteLine("Test() success");
}
catch (Exception)
{
Console.WriteLine("Test() error");
return;
}
Console.WriteLine("Test() end successfully");
}
【问题讨论】:
-
请记住,在这种情况下,您不应依赖于代码执行的顺序。由于您不是在等待 Test 方法完成,因此您无法保证它是在调用方法中的任何后续代码行之前还是之后完成。
-
因此,按照它完成的顺序完成不会被视为错误。
标签: c# .net wcf asynchronous async-await