This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public partial class App | |
{ | |
public App() | |
{ | |
InitializeComponent(); | |
this.Suspending += new SuspendingEventHandler(OnSuspending); | |
} | |
async protected void OnSuspending(object sender, SuspendingEventArgs args) | |
{ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const string RssUrl = "http://www.amazon.co.jp/gp/rss/bestsellers/books/492352/ref=zg_bs_492352_rsslink"; | |
// Amazon.co.jp: 本 > コンピュータ・IT > プログラミングのベストセラー | |
[TestMethod] | |
public void ReadAsyncTest1_基本_非同期実行開始後にWait() | |
{ | |
//* 準備 | |
FeedReader fr = new FeedReader(); | |
Stopwatch sw = Stopwatch.StartNew(); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public async Task<FeedData> ReadAsync(string feedUrlString) | |
{ | |
Uri feedUri = new Uri(feedUrlString); | |
return await ReadAsync(feedUri); | |
} | |
private async Task<FeedData> ReadAsync(Uri feedUri) | |
{ | |
SyndicationClient client = new SyndicationClient() { BypassCacheOnRetrieve = true }; | |
SyndicationFeed feed = await client.RetrieveFeedAsync(feedUri); //※ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
private /* async Task< */FeedData/* > */ Read/* Async */(Uri feedUri) | |
{ | |
SyndicationClient client = new SyndicationClient() { BypassCacheOnRetrieve = true }; | |
SyndicationFeed feed = /* await */ client.RetrieveFeed/* Async */(feedUri); | |
return feed.ToFeedData(); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[TestMethod] | |
public void ReadAsyncTest2_補足_Waitは無くてもOK() | |
{ | |
Stopwatch sw = Stopwatch.StartNew(); | |
Task<FeedData> task = (new FeedReader()).ReadAsync(RssUrl); | |
sw.Stop(); | |
Assert.IsTrue(200L > sw.ElapsedMilliseconds); //実際には 50mSec 程度 | |
Assert.IsFalse(task.IsCompleted, "ReadAsync 呼び出し直後"); //非同期実行中 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[TestMethod] | |
public void ReadAsyncTest3_補足_GetResultで同期メソッドとして扱う() | |
{ | |
Stopwatch sw = Stopwatch.StartNew(); | |
//FeedData fd = (new FeedReader()).ReadAsync(RssUrl).Result; // こうすれば同期メソッドと同じように使える | |
FeedData fd = (new FeedReader()).ReadAsync(RssUrl).GetAwaiter().GetResult(); // さらにこうすれば非同期実行側の例外もそのまま出てくる | |
sw.Stop(); | |
Assert.IsTrue(100L < sw.ElapsedMilliseconds); //実際には 500~1000mSec 程度掛かっている |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[TestMethod] | |
public async void ReadAsyncTest4_補足_テストケースはasyncに出来ない() | |
{ | |
FeedData fd = await (new FeedReader()).ReadAsync(RssUrl); | |
Assert.Fail("テストランナーに制御が戻ってから非同期実行が完了するので、この Fail() はテストランナーで捕捉できない。"); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public static class SyndicationFeedExtensions | |
{ | |
public static FeedData ToFeedData(this SyndicationFeed feed) | |
{ | |
FeedData feedData = new FeedData(){ | |
Title = feed.Title.Text, | |
}; | |
foreach (SyndicationItem item in feed.Items) { | |
feedData.Items.Add(CreateFeedItem(item)); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
private readonly string[] RssUrls = { | |
// Amazon.co.jp: 本 > コンピュータ・IT > プログラミングのベストセラー | |
"http://www.amazon.co.jp/gp/rss/bestsellers/books/492352/ref=zg_bs_492352_rsslink", | |
// Amazon.co.jp: パソコン・周辺機器 > ノートパソコンで一番ギフトとして贈られている商品 | |
"http://www.amazon.co.jp/gp/rss/most-gifted/computers/2151981051/ref=zg_mg_2151981051_rsslink", | |
// Amazon.co.jp: ソフトウェアで一番ほしい物リストに追加されている商品 | |
"http://www.amazon.co.jp/gp/rss/most-wished-for/software/ref=zg_mw_software_rsslink", | |
// Amazon.co.jp: DVD > アニメの新着ニューリリース | |
"http://www.amazon.co.jp/gp/rss/new-releases/dvd/562020/ref=zg_bsnr_562020_rsslink", | |
// Amazon.co.jp: MP3ダウンロード > MP3 楽曲のヒット商品 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public async Task<IList<FeedData>> ReadAsync(string[] feedUrlStrings) { | |
List<FeedData> result = new List<FeedData>(feedUrlStrings.Length); | |
foreach (string url in feedUrlStrings) { | |
result.Add(await this.ReadAsync(url)); | |
} | |
return result; | |
} |
OlderNewer