Task< string>返回意想不到的结果
本文关键字:意想不到 结果 返回 string Task | 更新日期: 2023-09-27 18:01:49
我有一个获取网站客户端源代码的函数,但遗憾的是它不是async函数:/所以,我创建了一个async版本的函数,它返回意想不到的结果。这是一个安全有效的方法
public static string GetWebSource(Uri url)
{
WebClient client = new WebClient();
Stream stream = client.OpenRead(url);
StreamReader reader = new StreamReader(stream);
string source = reader.ReadToEnd();
stream.Close();
reader.Close();
return source;
}
它像预期的那样返回源代码,很酷,很好,除了它不是async,所以它把UI弄乱了。下面是async版本
public async static Task<string> GetWebSourceAsync(Uri url)
{
WebClient client = new WebClient();
Stream stream = await client.OpenReadTaskAsync(url);
StreamReader reader = new StreamReader(stream);
string source = await reader.ReadToEndAsync();
stream.Close();
reader.Close();
return source;
}
除了这个函数返回"System. threading . tasks . task " 1[System. threading . tasks . task]。我在谷歌上搜索了一个解决方案,我找到了微软的解决方案,他们不知道如何做出好的解释或直接的解决方案,所以这是一个骗局。
下面是我的代码打印出的值
string source = GetWebSourceAsync(new Uri("http://checkip.dyndns.org/")).ToString();
source = source.Replace("<html><head><title>Current IP Check</title></head><body>Current IP Address: ", "").Replace("</body></html>", "");
Console.Write(source);
我怎么让它显示字符串呢?. tostring()扩展方法似乎不起作用:/Regards, TuukkaX.
您需要在async
上使用await
方法来将任务打开到T
(在您的情况下是字符串)。否则你只会得到Task<string>
。
string source = await GetWebSourceAsync(new Uri("http://checkip.dyndns.org/"));
source = source.Replace("<html><head><title>Current IP Check</title></head><body>Current IP Address: ", "").Replace("</body></html>", "");
Console.Write(source);
这是一个async函数,所以它返回一个Task<string>
。您应该await
它,或等待Task
完成。
我要做的是,在调用方法的行末尾添加。result:
string source = GetWebSourceAsync(new Uri("http://checkip.dyndns.org/")).Result;
'Result'取T out中的任何类型。在您的例子中,它使Task<string>
变成了string
。