私は WCF クライアント アプリに取り組んでおり、await/async パターンで問題に直面しています。次の行のようです: await client.LongOperationAsync(); 常にブロックします。私が理解しているように、スレッドは終了して Main() メソッドに進み、非同期メソッドが完了すると戻るはずでした。おそらく私は間違っています。
以下のコードの出力は (常に) です。
Test() 開始
Test() エラー
*
*
*
...
Test() メソッドは、コンテキストがメインに戻る前に常に完了します。どんな考えでも大歓迎です。
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");
}