- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的 RestSharp 实现存在以下问题。如何让我的应用程序在继续之前等待 ExecuteAsync()
的响应?
我尝试了不同的解决方案:
首先(该方法不等待 ExecuteAsync 响应):
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;
}
所以我尝试了这个,但是应用程序卡住了:
public Task<Connection> Connect(string userId, string password)
{
EventWaitHandle executedCallBack = new AutoResetEvent(false);
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));
executedCallBack.Set();
});
executedCallBack.WaitOne();
return tcs.Task;
}
最佳答案
我认为您忽略了 Task 和异步/等待模式的要点。
你不会在这个方法中等待,而是因为你要返回一个 Task<>
如果选择,它允许调用者异步等待它。
来电者会是这样的:
public async void ButtonClick(object sender, RoutedEventArgs args)
{
Connection result = await restClient.Connect(this.UserId.Text, this.Password.Text);
//... do something with result
}
编译器知道如何将这段与同步(阻塞)等价物非常相似的代码变成异步代码。
注意 async
和 await
关键字,并注意 Task<Connection>
已交Connection
.
鉴于此:您的第一个代码片段看起来不错。
第二个可能会导致问题,因为您正在引入另一种线程机制(即信号量 AutoResetEvent
)。此外@HaspEmulator 是正确的 - 如果这是在 UI 线程上,这已知会导致 WP 应用程序死锁。
关于c# - 等待 ExecuteAsync() 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15434983/
我的 RestSharp 实现存在以下问题。如何让我的应用程序在继续之前等待 ExecuteAsync() 的响应? 我尝试了不同的解决方案: 首先(该方法不等待 ExecuteAsync 响应):
我熟悉如何在我的 Google Drive 中创建文件夹,但我正在考虑使用异步方法来执行此操作。但是,在这样做时,我不确定如何获取我明确添加到我希望返回的字段中的字段。 我的代码如下: private
我在 Asp.Net Core Web API 中实现了一个 Microsoft.Extensions.Hosting.BackgroundService,它在 ExecuteAsync 内部有一个阻
对于使用 MSAL.NET v4 (nuget Microsoft.Identity.Client v4.3.0) 中的应用程序(客户端 ID 和 secret 无用户上下文)使用承载 token 进
所以,这一直有效(并且在模拟器中继续正常工作)。 当我在 Azure 中启动经典云服务时,出现以下错误。 ExecuteAsync() 位于 Web 角色中,位于 Results/ChallengeR
我对 AcquireTokenWithDeviceCode 的调用以及对返回对象使用 ExecuteAsync() 的调用永远不会返回。 deviceCodeResultCallback 中的断点按预
这是我的原始方法示例 public void insertIntoDb(SampleObject sample){ ------------------------------------
我正在尝试使用 ExecuteAsync 发出异步获取请求,但它从不回应。令我困惑的是 ExecuteAsync有效,两种同步方法也是如此 Execute和 Execute . 这是我的代码: var
我正在调用 request.executeAnsyc 以用信息填充我的数组并显示在 ListView 上。遗憾的是,在 request.executeAnsyc 完成之前调用了数组。所以我的 Frag
我正在尝试将 10000 条记录插入 Azure 表存储中。我正在使用 ExecuteAsync() 来实现它,但不知何故插入了大约 7500 条记录,其余记录丢失了。我故意不使用 await 关键字
所以我有一个 dotnet 核心工作进程,我想在某些情况下关闭工作进程。 protected override async Task ExecuteAsync(CancellationToken st
我有一个名为 Worker 的 BackgroundService,我重写了 ExecuteAsync 方法以每 10 秒运行一次。有时,我跑的东西会持续很长时间。在这种情况下,我想终止正在运行的程序
我在执行包装策略时遇到上述异常,包括:重试、断路器和隔板。 我有以下政策: var sharedBulkhead = Policy.BulkheadAsync( maxPara
如果根据 Protractor 规范,我在 browser.executeAsyncScript 中执行脚本,我应该如何告知脚本确实失败了?考虑以下对 browser.executeAsyncScri
尝试使用 Nsubstitute 为 RestClient(来自 RestSharp)模拟 ExecuteAsync 方法时遇到了困难。我看过一个使用 Moq 的示例(此处:Mocking Rests
我在异步方法中返回变量时遇到问题。我能够获取要执行的代码,但无法获取返回电子邮件地址的代码。 public async Task GetSignInName (string id) {
我正在尝试通过调用 session.executeAsync() 而不是 session.execute() 来加速我们的代码写入数据库。 我们有数据库连接可能断开的用例,目前之前的 execute(
我是 Javascript 的新手,正在尝试编写一个 firefox 附加组件。 我正在尝试将从 SQL 查询返回的数据传递/提取到调用函数。好像不行。 我搜索了有关变量范围的信息,查看了我可以在该站
我正在使用 datastax java 驱动程序 3.1.0 连接到 cassandra 集群,我的 cassandra 集群版本是 2.0.10。我正在以 QUORUM 一致性异步编写。 pri
在我的 api Controller 操作方法中。我正在为获取请求使用内容协商。代码是: IContentNegotiator negotiator = this.Configuration.Serv
我是一名优秀的程序员,十分优秀!