Istnieje kilka klas w .NET, które wykorzystują starą Asynchronous Programming Model (APM), który „nie jest zalecany dla rozwoju nowych”. APM używa par metod Begin/End, a metoda End przyjmuje jako parametr obiekt IAsyncResult. Jednym z takich klas jest TcpClient, z którym można połączyć asynchronicznie, tak:Przejście od Asynchronous model programowania (APM) do zadaniowego Asynchronous wzorca (TAP)
private void SomeMethod()
{
this.tcpClient = new TcpClient();
IAsyncResult result = this.tcpClient.BeginConnect(ip, port, EndConnect, null);
}
private void EndConnect(IAsyncResult asyncResult)
{
this.tcpClient.EndConnect(asyncResult);
// ... do stuff ...
}
Task-based Asynchronous Pattern (TAP) jest bardziej nowoczesna forma asynchronicznego programowania, które jest ułatwione dzięki wykorzystaniu async
i await
słów kluczowych.
Więc jeśli masz klasę jak TcpClient która korzysta z modelu APM i nie wystawiać żadnych zadań, jak można by go o dostosowaniu jego metod asynchronicznych do kranu tak, że mogą być używane z async
/await
?