gpt4 book ai didi

c# - 如何将值返回到异步方法中?

转载 作者:太空宇宙 更新时间:2023-11-03 11:07:13 26 4
gpt4 key购买 nike

当我调用这个方法时,没有任何反应,应用程序崩溃了。我认为这是由于 ExecuteAsync 方法所致。有人可以帮助我吗?这是我的代码。

代码 1:

public Task<Connection> Connect(string userId, string password)
{
var client = new RestClient(_baseUrl)
{
Authenticator = new SimpleAuthenticator("user", userId,
"password", password)
};
var tcs = new TaskCompletionSource<Connection>();
var request = new RestRequest(AppResources.Authenticating);
client.ExecuteAsync<Connection>(request, response => tcs.SetResult(new
JsonDeserializer().Deserialize<Connection>(response)));
return tcs.Task;
}

我也试过这段代码,但仍然存在同样的问题。

代码 2:

public async Task<Connection> Connect(string userId, string password)
{
var client = new RestClient(_baseUrl)
{
Authenticator = new SimpleAuthenticator("user", userId,
"password", password)
};
var tcs = new TaskCompletionSource<Connection>();
var request = new RestRequest(AppResources.Authenticating);
client.ExecuteAsync<Connection>(request, response => tcs.SetResult(new
JsonDeserializer().Deserialize<Connection>(response)));
Debug.WriteLine(tcs.Task.Result.Data);
return await tcs.Task;
}

最佳答案

您不想在异步代码中使用 Task.ResultTask.Wait。这些成员仅在您使用 Task 作为任务并行库的一部分(编写并行代码)时使用。它们几乎不应该在异步代码中使用。

在您的情况下,我怀疑您正在 Connect 返回的 Task 上调用 Result(或者可能在调用堆栈的更上方).这可以cause a deadlock ,正如我在我的博客上解释的那样。

我不同意@LasseVKarlsen 关于初学者的异步代码。我认为现在新的 async/await 语言功能已经推出,这绝对是您应该学习的东西。

我建议您从 my introduction 开始并跟进 MSDN docsTAP pattern .然后查看我的best practices article以避免最常见的陷阱。

关于c# - 如何将值返回到异步方法中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15428885/

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