IasyncResult 메서드를 사용하여 비동기식/대기

1504 단어 netcorec
내가 사용하는 응용 프로그램 중 하나는 의 PowerShell을 사용했습니다.NET C#API 프로젝트필요한 인터페이스를 제공하는 Nuget 패키지를 System이라고 합니다.관리층.자동화.그것은 마이크로소프트가 적극적으로 유지하고 있지만, 그 API는 여전히 비교적 오래된 IAsyncResult 비동기 프로그래밍 방법을 사용하는데, Invoke 대상 자체의 PowerShell 방법을 포함한다.
따라서 Invoke 방법으로 쓴 방법에서 async/await에 호출을 추가하려고 할 때, 반환은'good'olTask.Run 호출입니다.
public async Task<bool> IsSessionAliveAsync()
{
    return await Task.Run(() =>
    {
        _powerShell.Commands.AddCommand("Get-PSSession");

        var result = _powerShell.Invoke();
        return (result?.Count ?? 0) > 0;
    });
}
그러나 오늘 나는 TaskFactory류에서 깔끔한 작은 방법을 발견했다FromAsync.이 방법은 IAsyncResult 실례를 첫 번째 매개 변수로 하고 IAsyncResult 실례가 완성될 때 의뢰를 촉발한다.그리고... 기대하셔도 돼요!이것은 코드 흐름을 더욱 자연스럽게 하고 코드에서 어느 정도의 범위/중첩을 제거한다.
public async Task<bool> IsSessionAliveAsync()
{
    _powerShell.Commands.AddCommand("Get-PSSession");

    var result = await Task.Factory.FromAsync(_powerShell.BeginInvoke(), _powerShell.EndInvoke);
    return (result?.Count ?? 0) > 0;
}
괜찮았어!나는 많은 엔지니어들이 이 점을 보고 "그래, 그래, 이것은 영원히 존재한다."라고 말할 것이라고 믿는다.여보게, 내가 지금 찾게 되어 기쁘다.

좋은 웹페이지 즐겨찾기