コールバックで非同期メソッドを呼び出すこの使用方法を見つけawait
たので、Argotic RSS リーダー ライブラリで使用しました。
var tcs = new TaskCompletionSource<string>();
EventHandler<SyndicationResourceLoadedEventArgs> feedReaderOnLoaded = null;
feedReaderOnLoaded = (sender, args) =>
{
feedReader.Loaded -= feedReaderOnLoaded;
tcs.SetResult(""); // Needed so the await completes
};
feedReader.Loaded += feedReaderOnLoaded;
feedReader.LoadAsync(new Uri(feed.Url), new object());
await tcs.Task;
// Result is put in a property, rather than returned from the method
var items = feedReader.Channel.Items;
それでうまくいき、アイテムを手に入れました。
Fiddler で、RSS フィードの URL に対して 2 つの呼び出しが行われていることに気付きました。デバッガーでコードをステップ実行すると、 で 1 回呼び出されLoadAsync
、 で 2 回呼び出されawait tcs.Task
ます。通話の 1 つをなくすにはどうすればよいですか?
更新ここからダウンロードできるコンソールアプリプロジェクトがあり、この動作を示しています。
更新Argotic ライブラリの使用方法を変更したので、 を使用して RSS フィードをダウンロードしHttpClient
、コンテンツを Argotic に文字列として渡します。これにより、呼び出しが 1 つだけ生成されます。誰かにアイデアがあれば、なぜ2回呼び出されたのか知りたいです。