【发布时间】:2016-03-19 16:43:09
【问题描述】:
我正在构建一个具有注册选项的应用程序,并且我已经创建了一种方法来检查用户名是否可用,该方法是异步的。方法通过 WebRequest 连接到我的 PHP/MySQL API 并检索是否使用了用户名。
但是,每当我尝试在线运行此代码块时
var response = await webRequest.GetResponseAsync();
整个应用程序就会冻结。不过,同步执行相同的方法效果很好。
整个方法:
async public Task<UsernameAvailable> usernameAvailable()
{
try
{
token = "token=single";
function = "&function=checkUser";
string param = "¶m=" + User.username;
string result = "";
var webRequest = WebRequest.Create(@"http://" + APIURL + token + function + param);
var response = await webRequest.GetResponseAsync(); //troubled line
var content = response.GetResponseStream();
StreamReader reader = new StreamReader(content);
result = reader.ReadLine();
if (result == "0")
{
state = "Username is available.";
return UsernameAvailable.Available;
}
else
{
state = "Username is not available.";
return UsernameAvailable.NotAvailable;
}
}
catch
{
state = "Error checking for username.";
return UsernameAvailable.Error;
}
}
【问题讨论】:
-
同步与同步不同
-
@MatíasFidemraizer 在上下文中。我已经更新了问题。
-
你怎么打电话给
usernameAvailable? -
@YuvalItzchakov switch(API.UsernameAvailable().Result) (这是我的 API 类连接的一种方法)。你的回答成功了。
标签: c# wpf asynchronous async-await task-parallel-library