現状MinimumAsyncBridgeの現状について。どのくらい真っ当に動いているか。今は、[会社アカウント]((https://github.com/OrangeCube/)の方に移っています。背景でも説明した通り、Runメソッド(別スレッドで処理を開始する)は実装していません。ここはUnityコルーチンとかRxとつないで使う想定です。一方で、Minimumと言いつつ、Delay、WhenAll、WhenAnyは実装しました。これで、実プロジェクトに組み込んで使っていますが、ほぼ要件足りています。async/awaitを使いたい動機が主にサーバーとの通信(I/O非同期)で、スレッド処理(CPU非同期)をあまり必要としていないという背景はありますが。困ったのはだいたい実装ミスで、現在では修正済みです。今開発中のプロジェクト、7月までは非同期処理にIteratorTasksを使っていました。IteratorTasksも「Taskもどき」なので、この移行作業もそこまでは苦労しませんでした。変えて回るを地道にやること。MinimumAsyncBridgeの移植やらバグ修正をしながらの同時作業で1・2週間ほどで完了。IteratorTasksに対するawaiter実装もあるので、これが使えるかも。本家Taskクラスと互換性があります。要するに、完全下位互換。(逆は、実装していないメソッドを避けないとダメ)。4.5向けアプリを書くというようなこともできます。本家Taskクラスに転送されます。3.5と4.5混在です。レベルでの共有じゃなくて、同じDLLを参照)。4.6にバージョンアップ済みです。4は使えるけど4.5以上へのアップグレードはできない)場面は少ないと思いますが、一応ご注意を。(新規クラスを足すのは簡単。メソッドを追加するのは無理)。プロジェクトからだと、型フォワーディング実装が参照されるという挙動をします。3.5と4.5の混在ができます。UniRx向け型フォワーディング同じような仕組み、UniRxに対しても使えます。4.5向けライブラリでは本家Rxを使うこれらのライブラリを混在させて使うとか。出してあったりします。元々のUniRx利用者に影響が出ないように、#if分岐とかです。6.0で使えない構文があります。現状、以下の構文はIL2CPPでのビルドに失敗、あるいは、iOS実行時に実行時例外を起こします。async/awaitの問題というか、だいたいは例外処理がらみの問題です。使えないcatch句内での再スローができない例外フィルターが使えないiOS実行・Android実行iOSでの実行は、IL2CPPを使えば動きます。5.2.3では直っています。5.2.2の時は、ビルドで失敗していました。ビルドまで成功したら、実行時エラーが出たことはこれまでどのバージョンでもありませんでした。)ちなみに、Android実行では1度も問題は出ていません。効率TaskCompletionSourceクラスとかawaiterの実装などはほぼベタに本家からの移植なので、そんなに差はないはずです。問題はDelay、WhenAll、WhenAnyの実装。MinimumAsyncBridgeでは別実装しました。この辺りは、本家ほど最適な実装はできないんで、さすがに効率ちょっと悪いはず。本家実装だと同時実行するタスク数がむちゃくちゃ多くてもメモリ食わない実装になってるらしいけど、こっちはしっかりタスク数分のメモリを食う。スレッド間でスタックトレース情報を伝搬させて、スタックトレースを追えるようにしていることなんですが。ここはさすがに移植できなかったというか、移植が不可能だったりします。4.5で追加されたSystem.Runtime.ExceptionServices.ExceptionDispatchInfo.Captureが必須です。3.5向けのバックポーティングはできません。デバッグは本家Taskよりも少し大変になります(非同期メソッドの呼び出し元が分からなくなったりする)。実装し始めた当初の予想よりもだいぶあっさりと完成。ついて運営者について。