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;
}