Open2

C# 文字列や数値をawait

いぬいぬいぬいぬ

C#は文字列や数値もawaitできる

await 1000;
var result = await "command";

…!????

カラクリ

awaitできるオブジェクトは、GetAwaiter()という名前のメソッドを持っていてその戻り値がAwaiterちと呼ばれるものならできる。

つまり、拡張メソッドでstringやらintINumber<T>)やらにGetAwaiter()メソッドをつければawaitできちゃう。

code

intをawait可能に (awaitした数値ミリ秒分ディレイする)
public static class Extension
{
	public static TaskAwaiter GetAwaiter(this int intValue)
	{
		return Task.Delay(intValue).GetAwaiter();
	}
}

https://dotnetfiddle.net/rgjJvw

いぬいぬいぬいぬ

何がawaitできる?

//bool
await true;  //ok!

//enum
await MyEnum.Apple; //ok!

//index
await ^0;

//Range
await ..;