비동기 작업을 수행하는 클래스를 만들기 시작했으며 클라이언트가 콜백을 등록하여 일부 결과를 얻길 원합니다. 마지막으로 다음 코드에 도달했습니다. 그냥 예입니다, 나는 TaskFactory
하고 여기에작업 팩토리 및 콜백을 사용하여 비동기 메서드 만들기
Action<>, Func<>
클라이언트 기본 예이다 사용하여 일을 더 나은 방법이 있는지 알고 싶습니다 : 여기
Client client2 = new Client();
client2.GetClientList(ClientCallBack);
private static void ClientCallBack(List<Client> listado)
{
//Receive the list result and do some stuff in UI
}
는 클라이언트 클래스 GetCLientList
비동기 예 :
public void GetClientList(Action<List<Client>> Callback)
{
List<Client> listado=null;
Task.Factory.StartNew(() =>
{
listado = new List<Client>{
new Client{ apellidos="Landeras",nombre="Carlos",edad=25},
new Client{ apellidos="Lopez", nombre="Pepe", edad=22},
new Client{ apellidos="Estevez", nombre="Alberto", edad=28}
};
//Thread.Sleep to simulate some load
System.Threading.Thread.Sleep(4000);
}).ContinueWith((prevTask) =>
{
Callback(listado);
}
);
}
더 좋은 방법이 있습니까? 내 함수에서 Task
을 반환하고 클라이언트 측에 continueWith
을 등록 할 수 있다는 것을 알고 있지만, 클래스 내부에 포장하고 싶습니다.
편집
나는 또 다른 예를 게시하도록하겠습니다. 나는 sync
/async
버전을 webrequest
으로 만들려고했습니다. 은?
public string ExecuteRequest(string url)
{
HttpWebRequest httpwebrequest = (HttpWebRequest) WebRequest.Create(url);
HttpWebResponse httpwebresponse = (HttpWebResponse) httpwebrequest.GetResponse();
using (StreamReader sr = new StreamReader(httpwebresponse.GetResponseStream()))
{
return sr.ReadToEnd();
}
}
public void ExecuteRequestAsync(string uri,Action<string> callbackResult)
{
Task.Factory.StartNew(() => ExecuteRequest(uri), CancellationToken.None)
.ContinueWith((task) => callbackResult(task.Result));
}
C# 5.0을 사용할 수 없다고 가정합니다. 맞습니까? – svick
나는 무엇이든 사용할 수 있습니다. 그것은 단지 학습을위한 것입니다. 나는 모든 대답을 받아 들인다. –