我是 async/await 的完全初学者,所以任何帮助都会很棒。
async Task<bool> IsIPBannedAsync(string ip)
{
try
{
bool isBanned = false;
await foreach (var line in File.ReadLinesAsync(BannedIPFile))
{
if(line.Contains(ip.Trim())) { isBanned = true; break; }
}
return isBanned;
}
catch { return false; }
}
我从按钮调用它以将结果发送到标签:
private void btnCheck_Click(object sender, EventArgs e)
{
lblResult.Text = string.Empty;
lblResult.Text = IsIPBannedAsync(txtIP.Text);
}
当然,我尝试使用
Convert.ToBoolean()
| 发送结果Convert.ToString()
没有成功并得到一个 System.Threading
字符串而不是布尔值 true |假的。
没有异步,我可以让事情工作:
bool isBanned = false;
isBanned = File.ReadLines(BannedIPFile).Contains(ip.Trim());
return isBanned;
谁能告诉我我做错了什么?
欣赏 - 谢谢你
更新:
那些找不到我发布的内容的人,可以在这里看到它。我正在使用引入它的 net core 7.0。
在Button Click 事件中,它不喜欢返回一个boolean 并要求将其转换为一个字符串。并非所有 Microsoft 解决方案都有效。
如果我将
Task<bool>
更改为 Task<string>
然后在任何地方使用 return IsBanned.ToString();
它都有效。
@ProgrammingLlama,我从第 3 版开始使用 VB,并参加了 Microsoft 的大部分 .NET 发布,但自 2010 年左右以来,我根本没有真正为编码而烦恼,但我仍然每年为我的 MSDN 企业订阅付费,作为一个人。
我的VS版本:
Microsoft Visual Studio Enterprise 2022(64 位)- 当前 版本 17.5.4
我向 VS2022 开发人员社区提出的一些问题已在此站点以及 MSDN 站点上多次引用。
ReadAllLinesAsync
评论是正确的,因为如果答案在第 1 行,为什么要一直阅读文件?
编辑/更新 2:
Liam,它是C#,Net Core 7 桌面应用程序,它将被放入一个DLL 并在我朋友的net core 7.0 razor 网站上使用。我几乎每天都会用这个
感谢大家的发帖,我仍然需要解决这个问题。
大家好,感谢您的所有建议。我发现它和点击事件一样简单,here.
简而言之:
private async void btnCheck_Click(object sender, EventArgs e)
{
bool IsBanned = await IsIPBannedAsync(txtIP.Text);
lblResult.Text = IsBanned.ToString();
}
public async Task<bool> IsIPBannedAsync(string ip)
{
try
{
bool IsBanned = false;
await foreach (var line in File.ReadLinesAsync(IPFileList))
{
if (line.Contains(ip.Trim())) { IsBanned = true; break; }
}
return IsBanned;
}
catch { return false; } // This was done for ease here.
}
是的,它可以编译。