0

WinRT IAsyncOperation、async、await の短期集中コースを受講しています。Task を IAsyncOperation でラップしようとしていますが、キャストを行う簡単な方法を考え出すことができません。

public interface IInfo{}
public class InfoList : IInfo{}

public class Parser {
    private async Task<InfoList> ParseList() {
        var returnList = new InfoList();

        HttpClient client = new HttpClient();
        Task<string> htmlTask = client.GetStringAsync("http://stackoverflow.com");

        string html = await htmlTask;
        // parsing logic...
        return returnList;
    }

    public IAsyncOperation<IInfo> Parse()
    {
        return AsyncInfo.Run(_ =>
            Task.Run<IInfo>(async () =>
            {
                var returnList = await ParseList();
                return returnList;
            })
        );
        // I have tried following but causes InvalidCastException
        //return (IAsyncOperation<IInfo>)ParseList().AsAsyncOperation<InfoList>();
    }
}
4

2 に答える 2

3
public IAsyncOperation<IInfo> Parse()
{
    return AsyncInfo.Run(async _ => (IInfo) await ParseList());
}

また

public IAsyncOperation<IInfo> Parse()
{
    return AsyncInfo.Run(_ => ParseList().ContinueWith(t => (IInfo)t.Result));
}
于 2012-12-11T19:40:44.990 に答える
2

型は共変ではありません。つまり、 anを an にIAsyncOperation<>キャストすることはできません。IAsyncOperation<InfoList>IAsyncOperation<IInfo>

代わりにParseListメソッドが a を返すようにしてください。Task<IInfo>

于 2012-12-10T17:36:32.177 に答える