May 2025
Intermediate to advanced
254 pages
3h 28m
Japanese
非同期コードの利点は、.NETが発明される何十年も前からよく理解されていた。.NETの黎明期には、いくつかの異なるスタイルの非同期コードが開発され、あちこちで使われたが、最終的には破棄された。これらの多くは、現代のasync/await 。しかし、世の中には古い非同期パターンを使っているレガシーコードがたくさんある。この付録では、より一般的なパターンについて説明し、それらがどのように機能し、どのように最新のコードと統合するかを説明する。
、同じ型が何年もかけて更新され、複数の非同期パターンをサポートするようになり、より多くのメンバーを獲得することもある。その最たる例がSocket 。以下は、Send のコアとなるSocket クラスのメンバの一部である:
classSocket{// SynchronouspublicintSend(byte[]buffer,intoffset,intsize,SocketFlagsflags);// APMpublicIAsyncResultBeginSend(byte[]buffer,intoffset,intsize,SocketFlagsflags,AsyncCallbackcallback,objectstate);publicintEndSend(IAsyncResultresult);// Custom, very close to APMpublicIAsyncResultBeginSend(byte[]buffer,intoffset,intsize,SocketFlagsflags,outSocketErrorerror,AsyncCallbackcallback,objectstate);publicintEndSend(IAsyncResultresult,outSocketErrorerror);// CustompublicboolSendAsync(SocketAsyncEventArgse);// TAP (as an extension method)publicTask<int>SendAsync(ArraySegment<byte>buffer,SocketFlagssocketFlags);// TAP (as an extension method) using more efficient typespublicValueTask<int>SendAsync(ReadOnlyMemory<byte>buffer,SocketFlagssocketFlags,CancellationTokencancellationToken=default);}
悲しいことに、ほとんどのドキュメントはアルファベット順であり、使い方を単純化するために大量のオーバーロードがあるため、Socket のような型は理解しにくくなっている。このセクションのガイドラインが助けになることを願っている。
Task-Based Asynchronous Pattern (TAP)は、await ですぐに使える最新の非同期APIパターンである。各非同期演算子は、awaitableを返す単一のメソッドで表される。awaitable」とは、await によって消費され得る任意の型のことである。これは通常、 ...
Read now
Unlock full access