c# asynchronous delegates callback asynccallback

c# - ¿Cómo comparto un AsyncCallback con muchas llamadas APM BeginXXX?



asynchronous delegates (1)

Debería crear una clase que tenga todas sus variables "capturadas" como pasarlas como estado:

public class QueryState { public CloudTable CloudTable{get;set;} public Token Token{get;set;} public class ManualResetEvent Evt{get;set;} //i''m guessing that''s what this is //any other variables you were using }

Entonces, crearías un delegado como este:

AsyncCallback asyncCallback = (asyncResult) => { QueryState state = asyncResult.State as QueryState; var response = state.CloudTable.EndExecuteQuerySegmented(asyncResult); //rest of method... make sure to use the state variable to get whatever you need. }

Finalmente, lo llamas así:

var state = new QueryState { CloudTable = tableSymmetricKeys, //set everything else } var result = tableSymmetricKeys.BeginExecuteQuerySegmented(query, token, opt, ctx,asyncCallback, state);

Quiero reutilizar mi código con muchos métodos asíncronos estilo APM. Cada método tiene un par de firmas BeginXXX y EndXXX. Quiero reutilizar la misma devolución de llamada en cada una de las funciones.

Siempre he usado métodos anónimos como el siguiente, pero no estoy seguro de cómo extraerlo en una forma reutilizable. Sé que esto debería ser fácil, pero no puedo entender cómo usar un delegado para que esto suceda. (Esto es lo que obtengo por ser autodidacta)

var result = tableSymmetricKeys.BeginExecuteQuerySegmented(query, token, opt, ctx, (o) => { var response = (o.AsyncState as CloudTable).EndExecuteQuerySegmented(o); token = response.ContinuationToken; int recordsRetrieved = response.Results.Count; totalEntitiesRetrieved += recordsRetrieved; Console.WriteLine("Records retrieved in this attempt = " + recordsRetrieved + " | Total records retrieved = " + totalEntitiesRetrieved); evt.Set(); }, tableSymmetricKeys);

¿Cómo extraigo el método anónimo con (o) => ... en un delegado y lo vuelvo reutilizable?