C#

InnerException の再スローには ExceptionDispatchInfo を使おう

単発タスク(Task.WaitAllとかで集約していないタスク)を使った非同期処理を扱うメソッドでの例外を投げる場合、 AggregateException をそのまま出すと、メソッドを呼ぶ側で InnerException をチェックしたりしないといけないので面倒です(面倒ですよね?…

C# の long は読み書き Atomic じゃないから Interlocked 使おう

複数のスレッドから触られる long 変数(64bit変数)の取り扱い。 Java メインの人は引っかかりそうなのでメモ。Java ではできる「volatile long」が C# では未サポート(コンパイルエラーになる)なので、 long 変数への Atomic な読み書きをするには読み書き…

TcpClient#Connect のタイムアウト制御

TcpClient でコネクションを張る際の接続時タイムアウトをユーザコードで任意に指定しようとすると、次のようなコードが今風(C# 5.0 以降風)なのだろうか? try { int timeout = 接続タイムアウト(ms); TcpClient client = new TcpClient(); Task con_task =…

C# 非同期メソッドを作るにあたり、例外が出るタイミングでハマったメモ

通常のメソッドを非同期化しようとしてハマった罠。 普段 C# を使いこんでる人は既知だろうからスルー推奨。次のような感じのコードで hoge を非同期化しようとする場合、 void Main() { try { hoge(); } catch (Exception e) { ※ 例外処理 } ※ 続きの色々な…

C# のジェネリクスの型パラメータを参照型に制約する

C# のジェネリクスの型パラメータを参照型に制約する方法 答え→ where T : class 以下言い訳。 キャッシュなクラスを書いててハマった。むしろMSDNの日本語訳に釣られたヽ(`д´)ノC# のジェネリクスの型パラメータの制約一覧は↓のページに公式としてまとま…