はじめに Unity 2018から.NET 4.6がstableになり、async/awaitやTask使いこなせるようになっておく必要がでてきました。 今回はそれらの裏に隠れている、SynchronizationContextという機構とその使い方について紹介します。 なお、この記事はUnity2018.1bを基準に書いています。 SynchronizationContextとは何なのか SynchronizationContextとは、ざっくり説明すると「指定した処理を指定したスレッドで実行するために用いるオブジェクト」です。 非同期処理を実行する場合、あるスレッドから別スレッドに処理を移譲することになります。 このとき、「非同期処理が終わったときに元のスレッドに処理を戻す」という需要が発生します。 これを解決するのがSynchronizationContextというオブジェクトです。
![【Unity開発者向け】「SynchronizationContext」と「Taskのawait」 - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/806986473cc2720dc660b876c66a22ee8bc48ba0/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-412672c5f0600ab9a64263b751f1bc81.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9JUUzJTgwJTkwVW5pdHklRTklOTYlOEIlRTclOTklQkElRTglODAlODUlRTUlOTAlOTElRTMlODElOTElRTMlODAlOTElRTMlODAlOENTeW5jaHJvbml6YXRpb25Db250ZXh0JUUzJTgwJThEJUUzJTgxJUE4JUUzJTgwJThDVGFzayVFMyU4MSVBRWF3YWl0JUUzJTgwJThEJnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9NTYmcz03Njk4YTMyYjEyYWNkNGU2ODExZGI0Njk3ZDk4ZjMyNQ%26mark-x%3D142%26mark-y%3D57%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9NzcwJnR4dD0lNDB0b1Jpc291UCZ0eHQtY29sb3I9JTIzMjEyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTM2JnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnM9NTU0YjRjZmY3MjJkNjc5MGIwNDFiYjY2MTgwYmFmMjA%26blend-x%3D142%26blend-y%3D436%26blend-mode%3Dnormal%26txt64%3DaW4g5qCq5byP5Lya56S-IOODkOODvOODgeODo-ODq-OCreODo-OCueODiA%26txt-width%3D770%26txt-clip%3Dend%252Cellipsis%26txt-color%3D%2523212121%26txt-font%3DHiragino%2520Sans%2520W6%26txt-size%3D36%26txt-x%3D156%26txt-y%3D536%26s%3Df269b34f01c8de8c6e5626f38c2cbd69)