小编tug*_*erk的帖子

使用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万
查看次数

使用Razor View Engine从部分视图ASP.NET MVC 3中将内容注入特定部分

我在本节中定义了此部分 _Layout.cshtml

@RenderSection("Scripts", false)
Run Code Online (Sandbox Code Playgroud)

我可以从视图中轻松使用它:

@section Scripts { 
    @*Stuff comes here*@
}
Run Code Online (Sandbox Code Playgroud)

我正在努力的是如何从局部视图中获取本节内注入的一些内容.

我们假设这是我的视图页面:

@section Scripts { 

    <script>
        //code comes here
    </script>
}

<div>
    poo bar poo
</div>

<div>
  @Html.Partial("_myPartial")
</div>
Run Code Online (Sandbox Code Playgroud)

我需要Scripts_myPartial局部视图中注入部分内容.

我怎样才能做到这一点?

asp.net asp.net-mvc partial-views razor asp.net-mvc-3

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

ASP.NET MVC中的异步操作是否使用.NET 4上的ThreadPool中的线程

在这个问题之后,在ASP.NET MVC中使用异步操作时,我感到很舒服.所以,我写了两篇博文:

我对ASP.NET MVC上的异步操作有太多的误解.

我总是听到这句话:如果操作异步运行,应用程序可以更好地扩展

我也听到了很多这样的句子:如果你有大量的流量,你可能最好不要异步执行查询 - 消耗2个额外的线程来为一个请求提供服务会使资源远离其他传入的请求.

我认为这两句话是不一致的.

我没有太多关于threadpool如何在ASP.NET上工作的信息,但我知道线程池的线程大小有限.所以,第二句话必须与这个问题有关.

我想知道ASP.NET MVC中的异步操作是否在.NET 4上使用ThreadPool中的线程?

例如,当我们实现AsyncController时,应用程序结构如何?如果我获得巨大的流量,实现AsyncController是一个好主意吗?

有没有人可以在我眼前取下这个黑色的窗帘并向我解释ASP.NET MVC 3(NET 4)上有关异步的处理?

编辑:

我已经阅读了下面这个文件近几百次,我理解主要的交易,但我仍然感到困惑,因为那里有太多不一致的评论.

在ASP.NET MVC中使用异步控制器

编辑:

让我们假设我有如下控制器动作(AsyncController虽然不是实现):

public ViewResult Index() { 

    Task.Factory.StartNew(() => { 
        //Do an advanced looging here which takes a while
    });

    return View();
}
Run Code Online (Sandbox Code Playgroud)

正如你在这里看到的那样,我开始操作并忘掉它.然后,我立即返回而不等待它完成.

在这种情况下,这是否必须使用来自线程池的线程?如果是这样,在完成之后,该线程会发生什么?GC完成后会进来清理吗?

编辑:

对于@ Darin的回答,这里是一个与数据库对话的异步代码示例:

public class FooController : AsyncController {

    //EF 4.2 DbContext instance
    MyContext _context = new MyContext();

    public void IndexAsync() { …
Run Code Online (Sandbox Code Playgroud)

.net c# asp.net-mvc asynchronous asp.net-mvc-3

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

为什么要使用REST而不是基于SOAP的服务?

今天参加了一个关于REST的有趣演示,但是,我想不出一个原因(也没有提到)为什么REST比基于SOAP的服务堆栈更好或更简单地使用和实现.

是什么原因导致"真实世界"中的任何人使用REST而不是基于SOAP的服务?

rest web-services

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

如何创建ASP.NET Web API Url?

在ASP.NET MVC中,我们有@Url.Action行动.有类似的东西@Url.Api会路由到/ api/controller吗?

asp.net-mvc-4 asp.net-web-api

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

TypeScript的开放式函数参数

IMO是TypeScript语言的主要关注点之一,它支持现有的vanilla JavaScript代码.这是我乍一看的印象.看一下完全有效的以下JavaScript函数:

注意:我不是说我喜欢这种方法.我只是说这是一个有效的JavaScript代码.

function sum(numbers) { 

    var agregatedNumber = 0; 
    for(var i = 0; i < arguments.length; i++) { 
        agregatedNumber += arguments[i];
    }

    return agregatedNumber;
}
Run Code Online (Sandbox Code Playgroud)

因此,我们使用任意数量的参数来使用此函数:

console.log(sum(1, 5, 10, 15, 20));
Run Code Online (Sandbox Code Playgroud)

但是,当我使用TypeScript Playground尝试此操作时,它会产生编译时错误.

我假设这是一个错误.我们假设我们没有兼容性问题.那么,有没有办法用开放式参数编写这种类型的函数?如paramsC#中的功能?

javascript typescript

111
推荐指数
3
解决办法
7万
查看次数

c#中的引用类型和值类型有什么区别?

几个月前有人问我这个问题,我无法详细解释.C#中的引用类型和值类型有什么区别?

我知道,价值类型int,bool,float,等和引用类型delegate,interface等等.或者,这是不对的,太?

你能以专业的方式向我解释一下吗?

.net c# value-type reference-type

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

url中的双转义序列:请求过滤模块配置为拒绝包含双转义序列的请求

在我的ASP.NET MVC应用程序上,我正在尝试实现如下的URL:

/产品/标签/为+家庭

当我尝试使用默认配置运行我的应用程序时,我收到404.11响应代码的消息:

HTTP错误404.11 - 未找到

请求过滤模块被配置为拒绝包含双转义序列的请求.

我可以通过在web.config中实现以下代码来解决此错误:

  <system.webServer>
    <security>
      <requestFiltering allowDoubleEscaping="true" />
    </security>
  </system.webServer>
Run Code Online (Sandbox Code Playgroud)

所以,现在我没有得到任何404.11.

我想知道的是,我正在用这种实现打开什么样的安全漏洞.

顺便说一句,我的应用程序正在.Net Framework 4.0运行IIS 7.5.

asp.net iis asp.net-mvc iis-7 asp.net-mvc-3

78
推荐指数
3
解决办法
7万
查看次数

ASP.NET Web API:非描述性500内部服务器错误

正如标题所说,我从GET请求到IQueryable操作有500个内部服务器错误.错误的主体是空的.我的操作返回结果后发生该错误.

我使用ASP.NET Web API RC.

如何获得该错误的堆栈跟踪?

exception-handling asp.net-web-api

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

使用AuthorizeAttribute进行ASP.NET Web API授权

使用新的ASP.NET Web API测试版.我似乎无法获得建议的用户身份验证方法.建议的方法似乎是,将[Authorize]过滤器添加到API控制器.例如:

[Authorize] 
public IEnumerable<Item> Get()
{
    return itemsService.GetItems();
}
Run Code Online (Sandbox Code Playgroud)

但这并不像预期的那样有效.请求资源时,您将被重定向到登录表单.哪个不适合RESTful webapi.

我该怎么办呢?它在未来的版本中会有不同的工作吗?或者我应该回到实现我自己的动作过滤器?

rest asp.net-web-api

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