[解決済み] await yield return DoSomethingAsync()」は可能か?
2022-07-23 22:02:45
質問
通常のイテレータブロック (すなわち "yield return") は "async" および "await" と互換性がないのでしょうか?
これは、私がやろうとしていることの良いアイデアを与えてくれます。
async Task<IEnumerable<Foo>> Method(String [] Strs)
{
// I want to compose the single result to the final result, so I use the SelectMany
var finalResult = UrlStrings.SelectMany(link => //i have an Urlstring Collection
await UrlString.DownLoadHtmlAsync() //download single result; DownLoadHtmlAsync method will Download the url's html code
);
return finalResult;
}
しかし、私は "unable to load message string from resources" を引用したコンパイラーエラーを得ました。
以下は別の試みです。
async Task<IEnumerable<Foo>> Method(String [] Strs)
{
foreach(var str in strs)
{
yield return await DoSomethingAsync( str)
}
}
しかし、再びコンパイラはエラーを返します: "unable to load message string from resources".
以下は、私のプロジェクトにおける実際のプログラミングコードです。
これは、URLからHTMLをダウンロードするタスクであるリストタスクがある場合に非常に便利です。
という構文を使用した場合、結果として
IEnumerable<Foo>
. このようなコードは書きたくありません。
async Task<IEnumerable<String>> DownLoadAllURL(String [] Strs)
{
List<Foo> htmls= new ...
foreach(var str in strs)
{
var html= await DownLoadHtmlAsync( str)
htmls.Add(item)
}
return htmls;
}
でも、そうせざるを得ないようです。
何かとお世話になります。
どのように解決するのですか?
説明されていることは
Task.WhenAll
メソッドで実現できます。コードがどのように単純なワンライナーに変わるかに注目してください。何が起こるかというと、個々の url がダウンロードを開始し、次に
WhenAll
がこれらの操作をひとつにまとめるために使われます。
Task
にまとめ、待ち受けることができます。
Task<IEnumerable<string>> DownLoadAllUrls(string[] urls)
{
return Task.WhenAll(from url in urls select DownloadHtmlAsync(url));
}
関連
-
[解決済み】WebForms UnobtrusiveValidationModeは、jqueryのScriptResourceMappingを必要とする
-
[解決済み】WPFでXamlファイルにコメントを追加する方法は?
-
[解決済み】パラメータ付きRedirectToAction
-
[解決済み] forEachループでasync/awaitを使用する
-
[解決済み] async」と「await」の使い方とタイミング
-
[解決済み] イールドリターン」の正しい使い方
-
[解決済み] async/await - タスクとvoidをいつ返すか?
-
[解決済み] 非同期関数+await+setTimeoutの組合せ
-
[解決済み] 複数のタスクにasync/awaitを使用する
-
[解決済み】C#のyieldキーワードは何に使われるのか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】文字列が有効な DateTime " format dd/MM/yyyy " として認識されなかった。
-
[解決済み】C#はJavaのcharAt()と同等?)
-
[解決済み】ソケットのアドレス(プロトコル/ネットワークアドレス/ポート)は、通常1つしか使用できない?
-
[解決済み] [Solved] アセンブリ System.Web.Extensions dll はどこにありますか?
-
[解決済み] 'IEnumerable<SelectListItem>' 型の ViewData アイテムで、キーが国であるものは存在しない。
-
[解決済み】Visual studio 2019がデバッグ時にフリーズする件
-
[解決済み】"指定されたパスのフォーマットはサポートされていません。"
-
[解決済み】Visual Studio: 操作を完了できませんでした。パラメータが正しくありません
-
[解決済み】画像のペイントにTextureBrushを使用する方法
-
[解決済み】ファイルやアセンブリ、またはその依存関係の1つをロードできませんでした。