C# TaskCompletionSource引发错误,但不确定原因 公共静态任务GetData(字符串url,字符串数据) { UriBuilder fullUri=新的UriBuilder(url); 如果(!string.IsNullOrEmpty(数据)) Query=data; WebClient客户端=新的WebClient(); var tcs=new TaskCompletionSource(); client.DownloadStringCompleted+=(s,args)=> { 如果(args.Error!=null) tcs.TrySetException(args.Error);//此处 否则如果(参数已取消) tcs.trysetconceled(); 其他的 tcs.TrySetResult(参数结果); }; client.DownloadStringAsync(fullUri.Uri); 返回tcs.Task; }

C# TaskCompletionSource引发错误,但不确定原因 公共静态任务GetData(字符串url,字符串数据) { UriBuilder fullUri=新的UriBuilder(url); 如果(!string.IsNullOrEmpty(数据)) Query=data; WebClient客户端=新的WebClient(); var tcs=new TaskCompletionSource(); client.DownloadStringCompleted+=(s,args)=> { 如果(args.Error!=null) tcs.TrySetException(args.Error);//此处 否则如果(参数已取消) tcs.trysetconceled(); 其他的 tcs.TrySetResult(参数结果); }; client.DownloadStringAsync(fullUri.Uri); 返回tcs.Task; },c#,webclient,C#,Webclient,上述方法在“//此处”出现错误 问题是,我相信URL和参数是正确的。除了创建自己的API页面供其使用之外,我还应该首先检查哪些典型的东西?首先,您可以使用而不是包装自己的方法 也就是说,异常只是从WebClient返回的异常。InnerException非常明确-服务器返回NotFound(即404错误代码)。您设置异常的代码看起来非常有效。它在InnerException中说:“远程服务器返回了一个错误:NotFound。”因此,这是一个简单的404。该死,我真的不明白为什么它是404,我直

上述方法在“//此处”出现错误


问题是,我相信URL和参数是正确的。除了创建自己的API页面供其使用之外,我还应该首先检查哪些典型的东西?

首先,您可以使用而不是包装自己的方法


也就是说,异常只是从
WebClient
返回的异常。
InnerException
非常明确-服务器返回NotFound(即404错误代码)。您设置异常的代码看起来非常有效。

它在
InnerException
中说:“远程服务器返回了一个错误:NotFound。”因此,这是一个简单的404。该死,我真的不明白为什么它是404,我直接从我知道有效的api复制了代码。嗯,我会用一个测试url再试一次。
    public static Task<string> GetData(string url, string data)
    {
        UriBuilder fullUri = new UriBuilder(url);

        if (!string.IsNullOrEmpty(data))
            fullUri.Query = data;

        WebClient client = new WebClient();

        var tcs = new TaskCompletionSource<string>();

        client.DownloadStringCompleted += (s, args) =>
        {
            if (args.Error != null)
                tcs.TrySetException(args.Error); // HERE
            else if (args.Cancelled)
                tcs.TrySetCanceled();
            else
                tcs.TrySetResult(args.Result);
        };

        client.DownloadStringAsync(fullUri.Uri);

        return tcs.Task;
    }