Programing

Task <>에서 암시 적으로 형식을 변환 할 수 없습니다.

lottogame 2020. 12. 1. 07:31
반응형

Task <>에서 암시 적으로 형식을 변환 할 수 없습니다.


.NET 4.5에서 비동기 메서드 구문을 마스터하려고합니다. 나는 예제를 정확하게 이해했다고 생각했지만 비동기 메서드의 유형이 무엇이든 상관없이 (즉 Task<T>) 변환시 항상 동일한 유형의 오류 오류가 발생합니다 T. 다음 코드는 오류를 생성합니다.

암시 적 '형식을 변환 할 수 없습니다 System.Threading.Tasks.Task<System.Collections.Generic.List<int>>'에서 ' System.Collections.Generic.List<int>'

public List<int> TestGetMethod()
{
    return GetIdList(); // compiler error on this line
}


async Task<List<int>> GetIdList()
{
    using (HttpClient proxy = new HttpClient())
    {
        string response = await proxy.GetStringAsync("www.test.com");
        List<int> idList = JsonConvert.DeserializeObject<List<int>>();
        return idList;
    }
}

결과를 명시 적으로 캐스팅하면 실패합니다. 이:

public List<int> TestGetMethod()
{
    return (List<int>)GetIdList();  // compiler error on this line
}

다소 예측 가능하게이 오류가 발생합니다.

'형식을 변환 할 수 없습니다 System.Threading.Tasks.Task<System.Collections.Generic.List<int>>'에서 ' System.Collections.Generic.List<int>'

어떤 도움이라도 대단히 감사합니다.


Task<T>반환 유형을 기본 유형으로 암시 적으로 변환 할 수없는 예제의 주요 문제입니다 T. Task.Result 속성을 사용해야합니다. Task.Result는 비동기 코드를 차단하므로주의해서 사용해야합니다.

대신 이것을 시도하십시오.

public List<int> TestGetMethod()  
{  
    return GetIdList().Result;  
}

TestGetMethod async만들어야 하고 await를 앞에 붙이면 GetIdList();작업이에 풀 립니다 List<int>. 따라서 도우미 함수가 Task를 반환하는 경우 함수를 호출 할 때 기다려야합니다 async.

public Task<List<int>> TestGetMethod()
{
    return GetIdList();
}    

async Task<List<int>> GetIdList()
{
    using (HttpClient proxy = new HttpClient())
    {
        string response = await proxy.GetStringAsync("www.test.com");
        List<int> idList = JsonConvert.DeserializeObject<List<int>>();
        return idList;
    }
}

다른 옵션

public async void TestGetMethod(List<int> results)
{
    results = await GetIdList(); // await will unwrap the List<int>
}

수행하려는 작업에 따라 GetIdList (). Result로 차단하거나 (일반적으로 나쁜 생각이지만 컨텍스트를 말하기는 어렵습니다) 비동기 테스트 메서드를 지원하고 테스트 메서드가 수행하도록하는 테스트 프레임 워크를 사용할 수 있습니다. var results = await GetIdList ();

참고URL : https://stackoverflow.com/questions/12886559/cannot-implicitly-convert-type-from-task

반응형