C#の場合とは? わかりやすく解説

C#の場合

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/07/30 15:31 UTC 版)

Async/await」の記事における「C#の場合」の解説

2011年リリースされAsync CTPプロトタイプ版実装され、2012年C# 5.0正式にサポートされた。 C# 7より前のバージョンでは、非同期メソッドvoidTask、またはTask<T>を返すことが要求される。これはC# 7で拡張され、ValueTask<T>などの他の特定の型が含まれるようになったvoid返す非同期メソッドは、イベントハンドラー対象としている。同期メソッドvoid返すような大抵のケースでは、より直感的な例外処理可能にするため、代わりにTask返すことが推奨されるawait使用するメソッドは、asyncキーワードを付けて宣言する必要があるTask<T>型の戻り値を持つメソッドでは、async宣言されメソッドには、Task<T>ではなくTに割り当て可能な型のreturn文が必要である。コンパイラは値をTask<T>ジェネリックラップする。asyncなしで宣言されTaskまたはTask<T>戻り値の型を持つメソッドawaitすることもできる次の非同期メソッドは、await使用してURLからデータダウンロードするpublic async Task SumPageSizesAsync(IList uris) { int total = 0; foreach (var uri in uris) { this.statusText.Text = string.Format("Found {0} bytes ...", total); var data = await new WebClient().DownloadDataTaskAsync(uri); total += data.Length; } this.statusText.Text = string.Format("Found {0} bytes total", total); return total;} 注意: C#コンパイラawait対応正式版リリース時から、出力されるコードステートマシンによる実行効率性の高いコード生成するように実装されている。そのため、冒頭示したpromiseをTask.ContinueWith(...)によって継続させる疑似コード議論は、現実C#コンパイラには当てはまらないまた、ステートマシンは、コンパイラに完全にハードコーディングされているわけではなく、AsyncStateMachineAttribute属性使用してライブラリ提供者が独自のステートマシン提供できる拡張ポイント有している。ValueTaskなどの、より軽量なpromise対応するステートマシンは、この機能使用して実装されている。

※この「C#の場合」の解説は、「Async/await」の解説の一部です。
「C#の場合」を含む「Async/await」の記事については、「Async/await」の概要を参照ください。


C++の場合

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/08/02 03:50 UTC 版)

名前修飾」の記事における「C++の場合」の解説

名前修飾を行う処理系のうち、C++コンパイラは最も広く用いられているが、最も標準化進んでいないものである最初C++コンパイラはCソースコードへのトランスレータとして実装された。そのため、シンボルの名前はCの識別子規則に従う必要があった。後にC++コンパイラ自身機械語コードやアセンブラコードを出力するようになっても、計算機システムリンカ総じてC++シンボルサポートせず、名前修飾必要な状態が続いたC++言語は、標準的な修飾規則定めていない。そこで、コンパイラによって修飾規則異なる。C++修飾がかなり複雑になりうること(クラスデフォルト引数変数オーナー演算子オーヴァーロードなどの情報格納する)も加わり異なコンパイラオブジェクトコードリンクすることができないのが通常である。

※この「C++の場合」の解説は、「名前修飾」の解説の一部です。
「C++の場合」を含む「名前修飾」の記事については、「名前修飾」の概要を参照ください。


C++の場合

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/07/30 15:31 UTC 版)

Async/await」の記事における「C++の場合」の解説

C++では、await正式にC++20ドラフトマージされたため、正式なC++20一部として正式に受理される予定である。ただし、実際C++キーワードはawaitではなくco_awaitという名前になった。また、MSVCコンパイラClangコンパイラは、少なくとも何らかの形式のco_awaitをすでにサポートしている(GCCはまだサポートしていない)。 #include #include using namespace std;future add(int a, int b){ int c = a + b; co_return c;}future test(){ int ret = co_await add(1, 2); cout << "return " << ret << endl;}int main(){ auto fut = test(); fut.wait(); return 0;}

※この「C++の場合」の解説は、「Async/await」の解説の一部です。
「C++の場合」を含む「Async/await」の記事については、「Async/await」の概要を参照ください。


Cの場合

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/07/30 15:31 UTC 版)

Async/await」の記事における「Cの場合」の解説

C言語でのawait/asyncの正式なサポートはまだ存在しない。s_taskなどの一部のコルーチンライブラリは、マクロでawait/asyncキーワードをシミュレートする。 #include #include "s_task.h"// タスク用にメモリ定義int g_stack_main[64 * 1024 / sizeof(int)];int g_stack0[64 * 1024 / sizeof(int)];int g_stack1[64 * 1024 / sizeof(int)];void sub_task(__async__, void* arg) { int i; int n = (int)(size_t)arg; for (i = 0; i < 5; ++i) { printf("task %d, delay seconds = %d, i = %d\n", n, n, i); s_task_msleep(__await__, n * 1000); //s_task_yield(__await__); }}void main_task(__async__, void* arg) { int i; // 2つのサブタスクを作成 s_task_create(g_stack0, sizeof(g_stack0), sub_task, (void*)1); s_task_create(g_stack1, sizeof(g_stack1), sub_task, (void*)2); for (i = 0; i < 4; ++i) { printf("task_main arg = %p, i = %d\n", arg, i); s_task_yield(__await__); } // サブタスクの終了を待つ s_task_join(__await__, g_stack0); s_task_join(__await__, g_stack1);}int main(int argc, char* argv) { s_task_init_system(); // メインタスクを作成 s_task_create(g_stack_main, sizeof(g_stack_main), main_task, (void*)(size_t)argc); s_task_join(__await__, g_stack_main); printf("all task is over\n"); return 0;}

※この「Cの場合」の解説は、「Async/await」の解説の一部です。
「Cの場合」を含む「Async/await」の記事については、「Async/await」の概要を参照ください。

ウィキペディア小見出し辞書の「C#の場合」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

C#の場合のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



C#の場合のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、WikipediaのAsync/await (改訂履歴)、名前修飾 (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2024 GRAS Group, Inc.RSS