를 반환, 나는이 방법 비동기을하고 람다 함수의 결과를 기다릴 수있는 방법나는 람다 함수의 반환을 기다리고 다음과 같은 코드 샘플을 고려 결과
public XYZ GetSomething(string pluginId, string arg1, string arg2)
{
var plugin = (PluginType)_pluginManager.GetPlugin(pluginId, false);
plugin.RegisterCallback(result =>
{
//return this object instance of type XYZ
return result;
});
plugin.RequestData(arg1, arg2);
return null;
}
을하고하지 않고 결과를 반환 할 이 메소드를 블로킹 메소드로 바꾸는 것? RequestData
은 plugin
이며 비 차단이며 변경할 수 없습니다. result
이 결국 반환되며 모든 작업에서 래핑되지 않은 개체 인스턴스입니다.
람다 함수의 결과를 어떻게 기다리고 결과를 반환 할 수 있습니까?
편집 : RequestData
매우 빠르게 완료됩니다. 원격 서버에서 데이터를 요청한 다음 몇 초에서 몇 분 정도 걸릴 수있는 데이터가 반환되면 콜백을 호출합니다.
그냥 인수 목록 전에 "비동기"키워드를 넣어 비동기 람다 식을 표시 할 수 있습니다,하지만 난 RegisterCallback가 매개 변수로 비동기 위임을 받아 의심 : 당신의
GetSomething()
메서드 내에서이 일을 마무리하기 위해 당신은TaskCompletionSource
사용할 수 있습니다. –@ Marc-AntoineJacob thats는 어딘가에서 기다릴 필요가 없습니다. –
@ TimRutter 분명히, 그 의미는 무엇입니까. 그러나 RegisterCallback은 작업을 기다리는 비동기 대의원을 받아들이지 않을 것입니다. –