我正在使用完全异步的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请求,并在每个请求完成时写入控制台.
我使用Azure管理控制台中的"导出"选项创建了Azure SQL数据库的BACPAC备份.
将其下载到我的机器后,我对如何将其恢复到本地SQL Server实例有点困惑.我遇到了DacImportExportCli工具,但找不到本地恢复的示例.
此外,如果有人编写了一个脚本来执行此操作(因此可以安排),这将是非常棒的.
我在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元素的子元素(有效地取消注释上面的内容)?
我熟悉如何进行基本的转换,但之前从未这样做过.
我正在使用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 mvc应用程序中更好地管理javascript的实际例子.
在jQuery之前,我尽量避免使用javascript.现在我使用它很多,但我觉得我可能错过了一些在大型Web应用程序中构建我的javascript代码的最佳实践/建议.
有些事我感到内疚,想要离开:
人们可以推荐的任何网站,书籍等都将受到赞赏.
最近我一直在努力提高我的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中,我似乎有两种选择:
以前我总是使用回调方法:
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) 今天看到这个签名:
public interface ISomeInterface<in T>
in参数有什么影响?
我很难理解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
我过去曾经多次遇到这个问题,并最终决定找出原因.
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应该防止它.
基本上我正在努力做到这一点
select u.Hostname, u.IsCustom, (u.Status = 5) as IsActive
from SiteUrlMappings u
Run Code Online (Sandbox Code Playgroud)
其中5是表示"活动"URL的int.
当然这不起作用,我的sql就像一把旧螺丝刀一样生锈.
.net ×3
c# ×3
asp.net ×2
asp.net-mvc ×2
javascript ×2
async-await ×1
azure ×1
bacpac ×1
c#-5.0 ×1
commonjs ×1
generics ×1
jquery ×1
nhibernate ×1
split ×1
sql-server ×1
string ×1
t-sql ×1
web-config ×1