小编Ben*_*ter的帖子

使用async/await执行多个任务

我正在使用完全异步的API客户端,也就是说,每个操作都返回Task或者Task<T>,例如:

static async Task DoSomething(int siteId, int postId, IBlogClient client)
{
    await client.DeletePost(siteId, postId); // call API client
    Console.WriteLine("Deleted post {0}.", siteId);
}
Run Code Online (Sandbox Code Playgroud)

使用C#5 async/await运算符,启动多个任务并等待它们全部完成的正确/最有效方法是什么:

int[] ids = new[] { 1, 2, 3, 4, 5 };
Parallel.ForEach(ids, i => DoSomething(1, i, blogClient).Wait());
Run Code Online (Sandbox Code Playgroud)

要么:

int[] ids = new[] { 1, 2, 3, 4, 5 };
Task.WaitAll(ids.Select(i => DoSomething(1, i, blogClient)).ToArray());
Run Code Online (Sandbox Code Playgroud)

由于API客户端在内部使用HttpClient,我希望这会立即发出5个HTTP请求,并在每个请求完成时写入控制台.

.net c# task-parallel-library async-await c#-5.0

379
推荐指数
7
解决办法
23万
查看次数

Azure SQL数据库Bacpac本地还原

我使用Azure管理控制台中的"导出"选项创建了Azure SQL数据库的BACPAC备份.

将其下载到我的机器后,我对如何将其恢复到本地SQL Server实例有点困惑.我遇到了DacImportExportCli工具,但找不到本地恢复的示例.

此外,如果有人编写了一个脚本来执行此操作(因此可以安排),这将是非常棒的.

azure bacpac azure-sql-database

127
推荐指数
5
解决办法
5万
查看次数

Web Config转换以添加子元素

我在web.config中有以下配置:

  <resizer>
    <sizelimits imageWidth="0" />
    <plugins>
      <add name="MvcRoutingShim" />
      <!--<add name="AzureReader" connectionString="DataConnectionString" /> -->
      <add name="DiskCache" />
      <add name="PrettyGifs" />
      <add name="AnimatedGifs" />
    </plugins>
  </resizer>
Run Code Online (Sandbox Code Playgroud)

在web.config.Release中,如何将AzureReader元素添加为plugins元素的子元素(有效地取消注释上面的内容)?

我熟悉如何进行基本的转换,但之前从未这样做过.

asp.net web-config web-config-transform

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

单元测试ASP.NET DataAnnotations验证

我正在使用DataAnnotations进行模型验证,即

    [Required(ErrorMessage="Please enter a name")]
    public string Name { get; set; }
Run Code Online (Sandbox Code Playgroud)

在我的控制器中,我正在检查ModelState的值.对于从我的视图发布的无效模型数据,这正确返回false.

但是,在执行我的控制器操作的单元测试时,ModelState始终返回true:

    [TestMethod]
    public void Submitting_Empty_Shipping_Details_Displays_Default_View_With_Error()
    {
        // Arrange
        CartController controller = new CartController(null, null);
        Cart cart = new Cart();
        cart.AddItem(new Product(), 1);

        // Act
        var result = controller.CheckOut(cart, new ShippingDetails() { Name = "" });

        // Assert
        Assert.IsTrue(string.IsNullOrEmpty(result.ViewName));
        Assert.IsFalse(result.ViewData.ModelState.IsValid);
    }
Run Code Online (Sandbox Code Playgroud)

在测试中我是否需要做额外的事情来设置模型验证?

谢谢,

asp.net asp.net-mvc data-annotations

65
推荐指数
4
解决办法
3万
查看次数

asp.net mvc开发人员的javascript最佳实践

抱歉这个问题是如此主观.

我正在寻找一些如何在asp.net mvc应用程序中更好地管理javascript的实际例子.

在jQuery之前,我尽量避免使用javascript.现在我使用它很多,但我觉得我可能错过了一些在大型Web应用程序中构建我的javascript代码的最佳实践/建议.

有些事我感到内疚,想要离开:

  1. 在我的视图中内联javascript.我不是在谈论大量的代码,但我在每个视图上都有一些初始化代码并不罕见.
  2. 一个大的"网站"javascript文件.随着我的应用程序中使用的插件列表的增长(例如jquery ui),我的"启动"功能也正在初始化每个插件.通常这是为了避免问题1(添加javascript内联).也许每个视图的javascript文件是更好的解决方案?
  3. 一切似乎都非常程序化.我习惯于在.net中以面向对象的方式工作,但是当涉及到javascript时,这似乎就会消失.现在我知道OOP肯定是可能的,并且鼓励使用javascript,但是我可以看到一些实际的例子,说明我应该如何在真实的Web应用程序中执行它.
  4. 命名空间/项目结构 - 我已经看到了几个javascript命名空间的例子(凭借对象)和类似的方法,但再次可以做一些更多的背景知识.

人们可以推荐的任何网站,书籍等都将受到赞赏.

javascript asp.net-mvc jquery

62
推荐指数
2
解决办法
2万
查看次数

异步JavaScript - 回调与延迟/承诺

可能重复:
Javascript中Deferred,Promise和Future之间有什么区别?

最近我一直在努力提高我的JavaScript应用程序的质量.

我采用的一种模式是使用单独的"数据上下文"对象来为我的应用程序加载数据(之前我在我的视图模型中直接执行此操作).

以下示例返回在客户端上初始化的数据:

var mockData = (function($, undefined) {

    var fruit = [
        "apple",
        "orange",
        "banana",
        "pear"
        ];

    var getFruit = function() {
        return fruit;
    };

    return {
        getFruit: getFruit
    }
})(jQuery);
Run Code Online (Sandbox Code Playgroud)

在大多数情况下,我们将从服务器加载数据,因此我们无法立即返回响应.在我们的API中,我似乎有两种选择:

  1. 使用回调
  2. 回复承诺.

以前我总是使用回调方法:

var getFruit = function(onFruitReady) {
    onFruitReady(fruit);
};

// ...

var FruitModel = function(dataContext, $) {
    return {
        render: function() {
            dataContext.getFruit(function(fruit) {
                // do something with fruit
            });
        }
    };
};
Run Code Online (Sandbox Code Playgroud)

但是,我可以看到如何最终回调地狱,特别是在构建复杂的JavaScript应用程序时.

然后我遇到了Promises的设计模式.我不是要求调用者提供回调,而是返回一个可以观察到的"承诺":

var getFruit = function() {
    return $.Deferred().resolve(fruit).promise(); …
Run Code Online (Sandbox Code Playgroud)

javascript commonjs jquery-deferred

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

"in"泛型参数有什么作用?

今天看到这个签名:

public interface ISomeInterface<in T>

in参数有什么影响?

c# generics

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

NHibernate HiLo的说明

我很难理解HiLo发生器在NHibernate中的工作原理.我已经阅读了这里的解释,这使得事情变得更加清晰.

我的理解是每个SessionFactory都从数据库中检索高值.这样可以提高性能,因为我们可以访问ID而无需访问数据库.

上述链接的解释还说明:

例如,假设您有一个当前值为35的"高"序列,而"低"号则在0-1023范围内.然后客户端可以将序列递增到36(对于其他客户端,当它使用35时能够生成密钥)并且知道密钥35/0,35/1,35/2,35/3 ... 35/1023是全部可用.

这是如何在Web应用程序中工作的,因为我只有一个SessionFactory,因此只有一个hi值.这是否意味着在断开连接的应用程序中,您最终可能会在实体表中出现重复(低)ID?

在我的测试中,我使用了以下设置:

<id name="Id" unsaved-value="0">
  <generator class="hilo"/>
</id>
Run Code Online (Sandbox Code Playgroud)

我跑了一个测试来保存100个对象.我的表中的ID从32768 - 32868开始.下一个hi值增加到2.然后我再次运行测试,Ids在65536 - 65636范围内.

首先,为什么从32768而不是1开始,其次为什么从32868跳到65536?

现在我知道我的代理键不应该有任何意义,但我们在我们的应用程序中使用它们.为什么我不能让它们像SQL Server身份字段那样很好地增加.

最后有人能给我一个max_lo参数如何工作的解释吗?这是可以针对高值创建的最小低值(我脑中的实体ID)的数量吗?

这是NHibernate中的一个主题,我一直在努力寻找文档.我在动作书中阅读了整个NHibernate,但它仍然没有详细介绍它的工作原理.

谢谢Ben

.net nhibernate

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

StringSplitOptions.RemoveEmptyEntries不像宣传的那样工作

我过去曾经多次遇到这个问题,并最终决定找出原因.

StringSplitOptions.RemoveEmptyEntries会建议删除空条目.

那么为什么这个测试失败了呢?

var tags = "One, Two, , Three,   Foo Bar, , Day    , ";

var tagsSplit = tags.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
    .Select(s => s.Trim());

tagsSplit.ShouldEqual(new string[] {
    "One",
    "Two",
    "Three",
    "Foo Bar",
    "Day"
});
Run Code Online (Sandbox Code Playgroud)

结果:

  Values differ at index [2]
  Expected string length 5 but was 0. Strings differ at index 0.
  Expected: "Three"
  But was:  <string.Empty>
Run Code Online (Sandbox Code Playgroud)

所以它失败了,因为"Three"我们有一个空字符串 - 确切地说StringSplitOptions.RemoveEmptyEntries应该防止它.

.net c# string split

28
推荐指数
4
解决办法
5万
查看次数

SQL SELECT - 根据条件返回布尔值

基本上我正在努力做到这一点

select  u.Hostname, u.IsCustom, (u.Status = 5) as IsActive
from    SiteUrlMappings u
Run Code Online (Sandbox Code Playgroud)

其中5是表示"活动"URL的int.

当然这不起作用,我的sql就像一把旧螺丝刀一样生锈.

t-sql sql-server

24
推荐指数
4
解决办法
4万
查看次数