运行 使用 AsyncContext 进入死锁代码
Running into deadlocks code using AsyncContext
这是我的代码,我在我的库中使用 AsyncEx 来尝试绕过潜在的死锁,但我还是在那里:
return AsyncContext.Run(async () =>
{
var get = await httpClient.GetAsync(url);
if (get.IsSuccessStatusCode && (get.StatusCode == HttpStatusCode.OK))
{
var content = await get.Content.ReadAsStringAsync();
return content;
}
return "";
});
我 运行 这是一个命令行应用程序,连续使用多个不同的 url
值调用它,但在一个大 for
循环中同步调用它。如果有足够多的电话,它最终会停止前进。我做错了什么吗?
我认为发生的情况是调用 GetAsync 后继续无法切换回同一线程,因为另一个线程正在等待继续开始。以下代码是否有效?
return AsyncContext.Run(async () =>
{
var get = await httpClient.GetAsync(url).ConfigureAwait(false);
if (get.IsSuccessStatusCode && (get.StatusCode == HttpStatusCode.OK))
{
var content = await get.Content.ReadAsStringAsync().ConfigureAwait(false);
return content;
}
return "";
});
这是我的代码,我在我的库中使用 AsyncEx 来尝试绕过潜在的死锁,但我还是在那里:
return AsyncContext.Run(async () =>
{
var get = await httpClient.GetAsync(url);
if (get.IsSuccessStatusCode && (get.StatusCode == HttpStatusCode.OK))
{
var content = await get.Content.ReadAsStringAsync();
return content;
}
return "";
});
我 运行 这是一个命令行应用程序,连续使用多个不同的 url
值调用它,但在一个大 for
循环中同步调用它。如果有足够多的电话,它最终会停止前进。我做错了什么吗?
我认为发生的情况是调用 GetAsync 后继续无法切换回同一线程,因为另一个线程正在等待继续开始。以下代码是否有效?
return AsyncContext.Run(async () =>
{
var get = await httpClient.GetAsync(url).ConfigureAwait(false);
if (get.IsSuccessStatusCode && (get.StatusCode == HttpStatusCode.OK))
{
var content = await get.Content.ReadAsStringAsync().ConfigureAwait(false);
return content;
}
return "";
});