我正在使用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) 我最近意识到你不应该对IEnumerable的实现做任何假设(例如,当你在foreach循环期间对IEnumerable中的一个对象进行更改时,你不能假设循环(或甚至在每次迭代之后)可以在IEnumerable中找到更改的对象.
因此,在重新检查了我对IEnumerable的假设之后,我得出的结论是,事实上你唯一可以确定的是它允许你遍历集合的所有元素,其中集合(不是ICollection本身)可以做任何事.
我认为我无法做出的另一个假设是底层集合的顺序是特定的.从理论上讲,每次循环时,你都可以按照不同的顺序获取物品.
现在回到我原来的问题,考虑到上面的问题,First()
并且Last()
每次都可以返回不同的项目(理论上看看IEnumerable是什么)?
Exra信息: 当然通常这样会很好,因为IEnumerable是由订购的东西实现的.但是,如果IEnumerable调用Web服务来获取其元素,该怎么办呢?
背景信息:
我正在考虑这个因为我想为foreach循环中的第一个和最后一个元素做一些特定的事情.所以我查了一下if(currentElement == Enumerable.Last())
我想知道通过使用可选参数提供向后兼容性.
在我的程序中,我有一个函数接口,在我的程序和很多单元测试中使用.对于某些新功能,必须将布尔值传递给此函数,如果设置为,则会改变其行为false
.如果你传入true
,你将获得与以前相同的行为.
现在我必须传入true
我当前代码中的任何地方,我之前调用过这个函数.这就是为什么我在想:"好吧我只是把它true
作为布尔值的默认值.然后我只false
需要在我需要新行为的几个新地方传入."
然而,我觉得,我以这种方式制作界面的动机是现在必须做更少的编码.通常情况下,这是我能想到的唯一动机,这是一个捷径,可能会在以后咬我.我想不出以后会引起问题的任何事情,这就是我在这里发布这个问题的原因.
除了我上面描述的情况之外,一般来说,为了向后兼容性(例如,在第三方使用的接口中)使新参数可选是一个好主意吗?
提前致谢.
我有包含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) 我想知道.NET是否提供了通过列表或字典对象进行前缀搜索的任何标准功能.我遇到了StringDictionary
,但无法弄清楚它是否能为我做到这一点.
如果它可以进行前缀搜索,它是否也可以进行子串搜索或者让我使用正则表达式进行搜索?
提前致谢.
我做书呆子晚餐教程对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) 我想使用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是否为此提供了手段(例如,仅服务器功能的属性)?
如果我必须自己实现一些东西,那么我有一些想法,但我不确定它们有多好:
当我收到此错误消息"没有数据时无效尝试读取"时,我试图使用数据读取器的参数化查询.
但数据是有读者的!
以下是执行此任务的代码行
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
以下内容无效 -
public partial class form1 : Form : ICloneable
Run Code Online (Sandbox Code Playgroud)
有没有一种简单的方法在表单类上使用ICloneable?
c# ×7
.net ×3
linq ×2
asp.net-mvc ×1
c#-4.0 ×1
ienumerable ×1
prefix ×1
search ×1
signalr ×1
sql-server ×1
static ×1
string ×1