WebRequestを使用してHTTPヘッダーの10倍を要求する非同期メソッドを作成しました。 URLが無効である限り、私のプログラムは正常に動作しています。 URLは有効ですが、2つの要求のみが送信されます。HttpWebRequestを使用したデッドロック
これを確認するには、有効なURLを確認するボタンと無効なURLを確認するボタンの2つを作成しました。有効なURLを使用すると、私のカウンタは2だけ増分されますが、初めての場合に限ります。面白いのは、無効なURLのボタンを押しても、期待どおりに動作しているということです。
これは、CSファイルです:これは、XAMLファイル
<Window x:Class="WpfApplication2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Label Name="label" Content="Label" HorizontalAlignment="Left" Margin="78,151,0,0" VerticalAlignment="Top"/>
<Button Content="Valid URL" HorizontalAlignment="Left" Margin="64,71,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click"/>
<Button Content="Invalid URL" HorizontalAlignment="Left" Margin="144,71,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click_1"/>
</Grid>
</Window>
ある
public partial class MainWindow : Window
{
int counter = 0;
private async Task DoWork(String url)
{
for (int i = 0; i < 10; i++)
{
HttpWebRequest request = WebRequest.CreateHttp(url);
request.Method = "HEAD";
request.Timeout = 100;
HttpWebResponse response = null;
try
{
response = (HttpWebResponse)await request.GetResponseAsync();
}
catch(Exception ex)
{
}
counter++;
Dispatcher.Invoke(() => label.Content = counter);
}
}
private void Button_Click(object sender, RoutedEventArgs e)
{
DoWork("http://www.google.ch");
}
private void Button_Click_1(object sender, RoutedEventArgs e)
{
DoWork("http://www.adhgfqliehfvufdigvhlnqaernglkjhr.ch");
}
}
誰かがこのbehavierを説明できますか?
ちなみに、あなたがDispatcher.Invokeは必要ありません。それは待たねばならないものです。 – usr