小编Sar*_*nan的帖子

async Task <IEnumerable <T >> throws"不是迭代器接口类型"错误

以下代码抛出不是迭代器接口类型,只有当我使用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,但我不确定是什么导致了这个问题.

c# asynchronous

13
推荐指数
2
解决办法
3341
查看次数

在azure sdk中使用身份验证令牌

要在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使用的身份验证令牌.

c# authentication azure azure-sdk-.net azure-sdk

10
推荐指数
3
解决办法
3951
查看次数

Nuget包源自动取消选中

我添加了我们的org特定包源,其中url指向我有完全访问权限的本地网络.通过选中包管理器设置中的复选框并关闭窗口来添加它后,当我再次检查包源列表时,将自动删除("未选中")一个特定包源.任一扩展删除源.有些消息来源正在回来工作.不确定它是否与VS/OS更新有关.与此同时,其他自定义程序包源正在运行,而其他团队成员则不会遇到此问题.

c# visual-studio nuget

8
推荐指数
2
解决办法
2605
查看次数

在循环内部,使用task的continuewith将每个异步调用链接到返回的任务吗?

最好的做法是收集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)

我假设的步骤是

  1. LoopAsync 被叫
  2. count 设置为零,代码进入while循环,条件被检查
  3. SomeNetworkCallAsync 被调用,等待返回的任务
  4. 创建新任务/等待
  5. 新任务返回到CallLoopAsync()

现在,如果有足够的时间让流程生存,那么下一个代码行将如何/以何种方式执行count++并进一步SomeNetworkCallAsync执行?

更新 - 基于Jon HannaStephen Cleary:

因此,有一个任务,该任务的实现将涉及5次对NetworkCallAsync的调用,但使用状态机意味着这些任务不需要明确地链接以使其工作.例如,这允许它根据任务的结果决定是否中断循环,等等.

虽然它们没有链接,但每次调用都会等待前一个调用完成,因为我们已经使用了await(在状态m/c中awaiter.GetResult();).它的行为就好像连续五年已吁请他们执行一前一后另一个(仅后,以前的呼叫被完成).如果这是真的,我们必须更加小心我们如何组成异步调用.对于ex:

而不是写作

private async Task …
Run Code Online (Sandbox Code Playgroud)

c# asynchronous async-await

5
推荐指数
1
解决办法
1081
查看次数