async/await
async/await
について、理解するために書いてみた。
まだまだ、関連するメソッドや細かい仕様部分は調べつつ扱っていかなければ...
「非同期処理って何だろう?」の事始めにして、感覚を掴む記事になれば幸い
Point
async/await
はC# 5.0
から導入されたTask
と紐づく構文Task
は単なる手順書!async
は単なる非同期メソッド!await
はタスクの完了を待ち、取り出す!
これを抑えておけば、あとは下記のコードを見てもらえるとすぐ分かると思う。
asyncTask.Wait();
の部分とかコメントアウトするともっと体感できると思う
※メイン処理が早く終わってしまうので、待ち時間は10秒に変更
参考:
C# Task async, await の使い方 - mcommit's message
Taskを極めろ!async/await完全攻略 - Qiita
NOT EXISTSで差分抽出
サブクエリーが少なくとも1行を返す場合、EXISTS subquery は TRUE、NOT EXISTS subquery は FALSE。 下記の例は、aとbのテーブルの列名Aと列名Bを比較し一致しないものを返す。
例:
select * from テーブル名A as a where not exists ( select * from テーブル名B as b where a.列名A = b.列名B // 条件 ) and a.列名A' = xxx
開発DBに不正な値があり、それがどの子か特定した経緯。
EnumのTryParse
第1引数には変換する文字列を指定する。 第2引数には変換された値を受け取る型の変数を指定する。
Enum.Parse
とは異なり、例外をスローすることなく、変換できる。
Foo foo; if (!Enum.TryParse(bar.ToString(), out foo)) { throw new InvalidCastException($"Fooには定義されていない値が選択されてます"); }
コレクションが0の場合の Max() について
Max()を扱う場合、コレクションが 0
の場合も考慮する必要がある
よって、例えば、下記のような形を使う
(new int[] { }).OrderByDescending(x => x).FirstOrDefault();
値型と参照型
値型/参照型、構造体/クラス備忘録
値型はオブジェクト内にインライン定義され、 参照型は、実データをヒープに格納する。
その型をどのように扱うかを考え、 多様性(ポリモーフィズム)を持つか否かを考える必要がある。
using System; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace UnitTestProject1 { [TestClass] public class UnitTest1 { [TestMethod] public void TestMethod1() { // 値型 var valueType = new ValueType { value = 1 }; // 参照型 var classType = new ClassType { value = 1 }; Plus(valueType, classType); Assert.AreEqual(1, valueType.value); Assert.AreEqual(2, classType.value); } static void Plus(ValueType valueType, ClassType classType) { valueType.value += 1; classType.value += 1; } struct ValueType { public int value; } class ClassType { public int value; } } }