小编Mat*_*els的帖子

这是.NET 4.5的WhenAll的正确.NET 4实现吗?

我正在使用SignalR.Hub上的功能通常返回一个Task.我现在有一个函数可以添加一组连接.我想返回一个代表所有这些任务的任务.

我发现了一个完美的功能:Task.WhenAll.然而,这是.NET 4.5中的一项新功能,我仍然坚持使用.NET 4.

因此,我决定编写自己的版本,直到我们可以转到.NET 4.5.因为在涉及多线程时经常有一些警告(例如线程池的东西),我不确定我的实现是否正确:

public static Task WhenAll(IEnumerable<Task> tasks)
{
    return Task.Factory.StartNew(() => Task.WaitAll(tasks.ToArray()));
}
Run Code Online (Sandbox Code Playgroud)

在功能上,我认为它可行,但是我不会为新任务获得额外的阻塞线程吗?或者这是不可避免的?

编辑:以下是我将如何与SignalR一起使用:

public static Task Add(this IGroupManager groupManager, string connectionId,
                                                   IEnumerable<string> groups)
{
   return WhenAll(groups.Select(group => groupManager.Add(connectionId, group)));
}
Run Code Online (Sandbox Code Playgroud)

c# multithreading task-parallel-library

4
推荐指数
2
解决办法
1749
查看次数

IEnumerable <>上的First()和Last()真的是第一个也是最后一个?

我最近意识到你不应该对IEnumerable的实现做任何假设(例如,当你在foreach循环期间对IEnumerable中的一个对象进行更改时,你不能假设循环(或甚至在每次迭代之后)可以在IEnumerable中找到更改的对象.

因此,在重新检查了我对IEnumerable的假设之后,我得出的结论是,事实上你唯一可以确定的是它允许你遍历集合的所有元素,其中集合(不是ICollection本身)可以做任何事.

我认为我无法做出的另一个假设是底层集合的顺序是特定的.从理论上讲,每次循环时,你都可以按照不同的顺序获取物品.

现在回到我原来的问题,考虑到上面的问题,First()并且Last()每次都可以返回不同的项目(理论上看看IEnumerable是什么)?

Exra信息: 当然通常这样会很好,因为IEnumerable是由订购的东西实现的.但是,如果IEnumerable调用Web服务来获取其元素,该怎么办呢?

背景信息: 我正在考虑这个因为我想为foreach循环中的第一个和最后一个元素做一些特定的事情.所以我查了一下if(currentElement == Enumerable.Last())

.net linq ienumerable

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

使用可选参数进行向后兼容是一个好主意吗?

我想知道通过使用可选参数提供向后兼容性.

在我的程序中,我有一个函数接口,在我的程序和很多单元测试中使用.对于某些新功能,必须将布尔值传递给此函数,如果设置为,则会改变其行为false.如果你传入true,你将获得与以前相同的行为.

现在我必须传入true我当前代码中的任何地方,我之前调用过这个函数.这就是为什么我在想:"好吧我只是把它true作为布尔值的默认值.然后我只false需要在我需要新行为的几个新地方传入."

然而,我觉得,我以这种方式制作界面的动机是现在必须做更少的编码.通常情况下,这是我能想到的唯一动机,这是一个捷径,可能会在以后咬我.我想不出以后会引起问题的任何事情,这就是我在这里发布这个问题的原因.

除了我上面描述的情况之外,一般来说,为了向后兼容性(例如,在第三方使用的接口中)使新参数可选是一个好主意吗?

提前致谢.

backwards-compatibility optional-parameters c#-4.0

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

指定的包含路径无效.EntityType'SpiceShop.Models.Product'未声明名为'Products'的导航属性

我有包含2个表的数据库

TABLE Categories (CategoriesId, Name, Description)
TABLE Products (ProductId, CategoriesId, Title, ProductImageUrl)
Run Code Online (Sandbox Code Playgroud)

类别通过CategoriesId链接到Products.

我正在尝试使用LINQ获取所有特定标题.

 public ActionResult Browse(string categories)
 {
     var spices = spiceDB.Products.Include("Products").Single(p => p.Title == categories);                 
     return View(spices);
 }
Run Code Online (Sandbox Code Playgroud)

产品型号

namespace SpiceShop.Models
{
    public class Product
    {
        [Key]
        public int ProductId { get; set; }

        public int CategoriesId { get; set; }
        public string Title { get; set; }

        public string ProductImageUrl { get; set; }
        public List <Categorie> Name { get; set; }
    }
}
Run Code Online (Sandbox Code Playgroud)

分类模型

namespace SpiceShop.Models …
Run Code Online (Sandbox Code Playgroud)

c# linq asp.net-mvc

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

使用.NET StringDictionary通过列表/字典进行前缀搜索?

我想知道.NET是否提供了通过列表或字典对象进行前缀搜索的任何标准功能.我遇到了StringDictionary,但无法弄清楚它是否能为我做到这一点.

如果它可以进行前缀搜索,它是否也可以进行子串搜索或者让我使用正则表达式进行搜索?

提前致谢.

c# string search prefix

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

在一个类中声明静态方法并将其用作另一个类的方法

我做书呆子晚餐教程对ASP.NET MVC和我似乎很奇怪的C#语言遇到一个建设.这个问题的标题有点模糊,因为我无法定义这是什么.这也使我很难搜索这个主题,因此我决定提出一个问题.

Nerd Dinner教程中,我看到以下代码片段:

public static class ControllerHelpers {

    public static void AddRuleViolations(this ModelStateDictionary modelState, IEnumerable<RuleViolation> errors) {

        foreach (RuleViolation issue in errors) {
            modelState.AddModelError(issue.PropertyName, issue.ErrorMessage);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

后来他们表明:

//
// GET: /Dinners/Edit/2

public ActionResult Edit(int id) {

    Dinner dinner = dinnerRepository.GetDinner(id);

    return View(dinner);
}

//
// POST: /Dinners/Edit/2

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(int id, FormCollection formValues) {

    Dinner dinner = dinnerRepository.GetDinner(id);

    try {

        UpdateModel(dinner);

        dinnerRepository.Save();

        return RedirectToAction("Details", new { id=dinner.DinnerID });
    }
    catch {

        ModelState.AddRuleViolations(dinner.GetRuleViolations()); …
Run Code Online (Sandbox Code Playgroud)

.net c# extension-methods static

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

如何使服务器仅在SignalR中起作用

我想使用SignalR将数据推送到Web客户端.

public class PushHub : Hub
{
    public void Push(string data)
    {
        Clients.push(data);
    }
}

public class DataGenerator
{
    private readonly PushHub pushHub;

    public void DataGenerator(PushHub pushHub)
    {
        this.pushHub = pushHub;
    }

    public void Tick()
    {
        pushHub.Push("Ping");
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,我不希望客户端能够调用此功能.

从服务器我只是计划调用Hub对象本身的函数(除非这是一个坏主意?).

但我不希望客户端能够调用push.

SignalR是否为此提供了手段(例如,仅服务器功能的属性)?

如果我必须自己实现一些东西,那么我有一些想法,但我不确定它们有多好:

  • 让另一个类访问Clients属性,然后调用Push.
  • 将某种Nonce存储在只有服务器知道的HUB中,并将该nonce作为Push的额外参数传递.
  • 从上下文中检查客户端ID是什么.我想当从随机线程调用函数时它不存在.

c# signalr

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

错误 - "没有数据时无效尝试读取".即使数据存在,也使用SQLDataReader

当我收到此错误消息"没有数据时无效尝试读取"时,我试图使用数据读取器的参数化查询.

但数据是有读者的!

在此输入图像描述

以下是执行此任务的代码行

using (ConnectionManager connectionManager = new ConnectionManager())
{   
    string query = @"SELECT * FROM LoginTab WHERE username=@username " +
              "AND password=@password";

    List<SqlParameter> sqlParameterCollection = new List<SqlParameter>();
    sqlParameterCollection.Add(new SqlParameter("@username", SqlDbType.NVarChar) { Value = userName });
    sqlParameterCollection.Add(new SqlParameter("@password", SqlDbType.NVarChar) { Value = password });

    SqlDataReader sqlDataReader = connectionManager.ExecuteReader(query, CommandType.Text, sqlParameterCollection);

    String roles = sqlDataReader[0].ToString();
    return roles;
}
Run Code Online (Sandbox Code Playgroud)

ExecuteReader函数在另一个类中定义.

public SqlDataReader ExecuteReader(String strcmd, CommandType type, List<SqlParameter> Parametercollections)
{
    connnection = new SqlConnection(Connnectionstring);
    command = new SqlCommand(strcmd, connnection);
    command.CommandType = type;
    foreach …
Run Code Online (Sandbox Code Playgroud)

c# sql-server sql-server-2005 visual-studio-2010 visual-studio

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

如何实现接口并从基类继承?

以下内容无效 -

public partial class form1 : Form : ICloneable 
Run Code Online (Sandbox Code Playgroud)

有没有一种简单的方法在表单类上使用ICloneable?

.net c#

-1
推荐指数
1
解决办法
87
查看次数