以下代码抛出不是迭代器接口类型,只有当我使用async await并包装IEnumerablewith Task时.如果我删除async await,我可以去IEnumerable<List<T>>.
private async Task<IEnumerable<List<T>>> GetTableDataAsync<T>(CloudTable cloudTable, TableQuery<T> tableQuery)
where T : ITableEntity, new()
{
TableContinuationToken contineousToken = null;
do
{
var currentSegment = await GetAzureTableDateAsync(cloudTable, tableQuery, contineousToken);
contineousToken = currentSegment.ContinuationToken;
yield return currentSegment.Results;
} while (contineousToken != null);
}
Run Code Online (Sandbox Code Playgroud)
虽然我可以考虑使用Rx,但我不确定是什么导致了这个问题.
要在azure sdk流畅的nuget中使用Azure进行身份验证,有一种方法可以使用客户端ID和密码,如下所示
var azureCredentials = new AzureCredentials(new
ServicePrincipalLoginInformation
{
ClientId = "ClientId",
ClientSecret = "ClientSecret"
}, "tenantId", AzureEnvironment.AzureGlobalCloud);
Run Code Online (Sandbox Code Playgroud)
在下面的代码中创建IAzure时,是否有任何接口可以使用身份验证令牌(JWT)而不是使用客户端ID和密码?
_azure = Azure
.Configure()
.WithLogLevel(HttpLoggingDelegatingHandler.Level.Basic)
.Authenticate(azureCredentials)
.WithSubscription(_subscriptionId);
Run Code Online (Sandbox Code Playgroud)
注意:我有一个单独的身份验证器模块,它保留客户端ID和秘密,并使用它们来获取将由其他组件/ sdks使用的身份验证令牌.
我添加了我们的org特定nuget包源,其中url指向我有完全访问权限的本地网络.通过选中包管理器设置中的复选框并关闭窗口来添加它后,当我再次检查包源列表时,将自动删除("未选中")一个特定包源.任一的VisualStudio或的NuGet扩展删除源.有些消息来源正在回来工作.不确定它是否与VS/OS更新有关.与此同时,其他自定义程序包源正在运行,而其他团队成员则不会遇到此问题.
最好的做法是收集async循环内集合中的所有调用并执行Task.WhenAll().但是,想要了解await在循环中遇到的情况会发生什么,返回Task包含什么?那些进一步的async电话呢?它会创建新任务并将它们添加到已经返回的Task顺序中吗?
根据下面的代码
private void CallLoopAsync()
{
var loopReturnedTask = LoopAsync();
}
private async Task LoopAsync()
{
int count = 0;
while(count < 5)
{
await SomeNetworkCallAsync();
count++;
}
}
Run Code Online (Sandbox Code Playgroud)
我假设的步骤是
LoopAsync 被叫count 设置为零,代码进入while循环,条件被检查SomeNetworkCallAsync 被调用,等待返回的任务CallLoopAsync()现在,如果有足够的时间让流程生存,那么下一个代码行将如何/以何种方式执行count++并进一步SomeNetworkCallAsync执行?
更新 - 基于Jon Hanna和Stephen Cleary:
因此,有一个任务,该任务的实现将涉及5次对NetworkCallAsync的调用,但使用状态机意味着这些任务不需要明确地链接以使其工作.例如,这允许它根据任务的结果决定是否中断循环,等等.
虽然它们没有链接,但每次调用都会等待前一个调用完成,因为我们已经使用了await(在状态m/c中awaiter.GetResult();).它的行为就好像连续五年已吁请他们执行一前一后另一个(仅后,以前的呼叫被完成).如果这是真的,我们必须更加小心我们如何组成异步调用.对于ex:
而不是写作
private async Task …Run Code Online (Sandbox Code Playgroud)