4

コールバックで非同期メソッドを呼び出すこの使用方法を見つけ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回呼び出されたのか知りたいです。

4

1 に答える 1