小编Hal*_*nac的帖子

如何将Table.ExecuteQuerySegmentedAsync()与Azure表存储一起使用

使用Azure存储客户端库2.1,我正在进行表存储异步查询.我创建了这段代码:

public async Task<List<TAzureTableEntity>> GetByPartitionKey(string partitionKey)
{
    var theQuery = _table.CreateQuery<TAzureTableEntity>()
                         .Where(tEnt => tEnt.PartitionKey == partitionKey);
    TableQuerySegment<TAzureTableEntity> querySegment = null;
    var returnList = new List<TAzureTableEntity>();
    while(querySegment == null || querySegment.ContinuationToken != null)
    {
        querySegment = await theQuery.AsTableQuery()
                                     .ExecuteSegmentedAsync(querySegment != null ?
                                         querySegment.ContinuationToken : null);
        returnList.AddRange(querySegment);
    }
    return returnList;
}
Run Code Online (Sandbox Code Playgroud)

假设有大量数据返回,因此会有很多往返表存储的往返.我遇到的问题是我们正在等待一组数据,将其添加到内存列表中,等待更多数据,将其添加到同一列表中,等待更多数据,将其添加到列表中......等等等等.为什么不围绕常规TableQuery包装Task.Factory.StartNew()?像这样:

public async Task<List<TAzureTableEntity>> GetByPartitionKey(string partitionKey)
{
    var returnList = await Task.Factory.StartNew(() =>
                                                 table.CreateQuery<TAzureTableEntity>()
                                                .Where(ent => ent.PartitionKey == partitionKey)
                                                .ToList());
    return returnList;
}
Run Code Online (Sandbox Code Playgroud)

这样做似乎我们不会来回反复播放SynchronizationContext.或者它真的重要吗?

编辑以改写问题

上面提到的两种情况有什么区别?

c# asynchronous azure azure-table-storage async-await

8
推荐指数
1
解决办法
1万
查看次数

使用ASP.NET将多个基于声明的身份提供者与一个用户相关联

在使用.NET 4.5框架和Azure访问控制服务(ACS)的ASP.NET MVC 4应用程序中,我希望为用户提供多种身份验证可能性(即Google,Facebook,Windows Live等).将单个用户与多个身份提供商关联的"最佳做法"是什么?

例如,假设用户有一天登录Google,然后第二天进入另一个浏览器并使用Facebook登录.我怎么知道将Facebook登录与以前的Google登录关联到同一个用户?

claims-based-identity acs asp.net-mvc-4 .net-4.5

6
推荐指数
1
解决办法
1964
查看次数