Delegate.BeginInvoke 呼び出しの.NET Coreへのマイグレーション

I recently worked with a couple customers migrating applications to .NET Core that had to make code changes to workaround BeginInvoke and EndInvoke methods on delegates not being supported on .NET Core. In this post, we’ll look at why these APIs aren’t implemented for .NET Core,

情報源: Migrating Delegate.BeginInvoke Calls for .NET Core | .NET Blog

概略

.NET CoreではdelegateのBeginInvoke、EndInvoke両メソッドの組合せによる非同期処理に対応していません。これはもともとCLRが用意した非同期処理の方法ではなく、C#コンパイラにより実現されており、かつ、それが.NET Coreで実装されない.NET Frameworkのリモーティングに依存しているためです。

しかし一つ問題があり、.NET Frameworkから.NET Coreへの移植の際にその使用が推奨されている、.NET Coreへの非互換APIを検出する.NET API Portability Analyzerでは、このコードを検出する事が出来ません。これは、この機能が先に説明したようにCLR機能やクラスライブラリとして実装されているわけではないためです。

そして、この記事ではdelegateのBeginInvoke、EndInvoke両メソッドの組合せによる非同期処理をTaskベースの非同期処理に置き換える方法について説明しています。

私的な追記

デリゲートのBeginInvoke、EndInvoke両メソッドの組合せによる非同期処理は、Threadクラスを使用した非同期処理に比べて、記述がしやすく、作成したスレッドで発生した例外を取得する手段があったので、.NET Framework 2.0ぐらいまでのコードではよく使われていたと思います。特にWinFormsなどのアプリケーションで、重いI/O処理などに使用されていることが多かったように思いますので、古いコードの移植の際にはツールで見つからないこともあり、注意が必要でしょう。

ウインター #Forzathon 3/29~4/5 #ForzaHorizon4

シーズンは日本時間では木曜日23時30分に切り替わります。秋から冬となりました。

正確には3/28 23:30~4/4 23:30まで。

シリーズリワード

  • 80% 達成: 1973 Ford Capri RS3100 Forza Edition
  • 50% 達成: 1996 Ferrari F50 GT

1973 Ford Capri RS3100 Forza Edition

シーズンリワード

  • 80% 達成: 1952 Hudson Hornet
  • 50% 達成: 2018 #88 Vaughn Gittin Jr. Mustang RTR Drift Car

1952 Hudson Hornet

2018 #88 Vaughn Gittin Jr. Mustang RTR Drift Car

ウィークリーチャレンジ 長い伝統

Snowチューニングでチャレンジ。

お急ぎ便

2013 Ford Transit SuperSportVanに乗る。

クリア

Transitに乗ってクリア。

Continue reading ウインター #Forzathon 3/29~4/5 #ForzaHorizon4