gpt4 book ai didi

c# - 如何等待异步完成?

转载 作者:可可西里 更新时间:2023-11-01 11:53:55 26 4
gpt4 key购买 nike

我目前正在开发一个聊天客户端(Windows 应用商店应用程序 - C#),我目前停留在注册部分。在我将用户名、密码、电子邮件等相关数据发送到服务器以创建新用户之前,我调用函数“CheckSignUp(...)”,它首先检查用户名是否已经存在。它首先发送关键字/F011/,然后发送用户名,然后我应该接收关键字 OK 或 NOK(用户名已存在)。这是代码:

public async Task<string> CheckSignUp(string username)
{
writer.WriteString("/F011/" + "\n");
writer.WriteString(username + "\n");
await writer.StoreAsync();

reader.InputStreamOptions = InputStreamOptions.Partial;
string result = reader.ReadString(await reader.LoadAsync(3));
return result;
}

当我按下“注册”按钮时调用此函数。问题是我在第二次按下“注册”按钮后才收到错误消息。下面是 Button_click 事件的相关代码:

private async void bnSignUp_Click(object sender, RoutedEventArgs e)
{
...

string ValidUser = await App.ChatConnection.CheckSignUp(tbUserName.Text);
if (ValidUser == "NOK")
{
FailText.Children.Add(new InfoTextBox("Error! Username already exists."));
tbUserName.Text = "";
}
....
}

readerwriter 对象的创建发生在与服务器建立连接时:

socket = new StreamSocket(); 
HostName hostname = new HostName(host);
await socket.ConnectAsync(hostname, port);
writer = new DataWriter(socket.OutputStream);
reader = new DataReader(socket.InputStream);

编辑:我在尝试登录时也遇到了同样的问题(Login() 函数的工作方式类似于 CheckSignUp 函数):

public async Task<string> Login(string username, string password)
{
writer.WriteString("/F050/" + "\n");
writer.WriteString(GetHash(password) + "\n");
writer.WriteString("\n");
writer.WriteString(username + "\n");
await writer.StoreAsync();

reader.InputStreamOptions = InputStreamOptions.Partial;
return reader.ReadString(await reader.LoadAsync(3));
}

最佳答案

我建议您首先尽量使用 TCP/IP。使用 WebAPI、SignalR 等

如果您确实需要使用 TCP/IP,那么您需要实现 message framing ,正如我在我的博客上所描述的那样。

关于c# - 如何等待异步完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22131264/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com