小编Ead*_*del的帖子

将同步代码包装到异步调用中

我在ASP.NET应用程序中有一个方法,需要花费很多时间才能完成.在一个用户请求期间,对此方法的调用最多可能发生3次,具体取决于用户提供的缓存状态和参数.每次通话大约需要1-2秒才能完成.该方法本身是对服务的同步调用,并且不可能覆盖实现.
因此,对服务的同步调用类似于以下内容:

public OutputModel Calculate(InputModel input)
{
    // do some stuff
    return Service.LongRunningCall(input);
}
Run Code Online (Sandbox Code Playgroud)

并且该方法的用法是(注意,方法调用可能不止一次):

private void MakeRequest()
{
    // a lot of other stuff: preparing requests, sending/processing other requests, etc.
    var myOutput = Calculate(myInput);
    // stuff again
}
Run Code Online (Sandbox Code Playgroud)

我尝试从我这边改变实现以同时提供这种方法的工作,这就是我到目前为止所做的.

public async Task<OutputModel> CalculateAsync(InputModel input)
{
    return await Task.Run(() =>
    {
        return Calculate(input);
    });
}
Run Code Online (Sandbox Code Playgroud)

用法("do do stuff"代码的一部分与服务调用同时运行):

private async Task MakeRequest()
{
    // do some stuff
    var task = CalculateAsync(myInput);
    // do other stuff
    var myOutput = await task; …
Run Code Online (Sandbox Code Playgroud)

c# asp.net asynchronous async-await c#-5.0

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

定期以指定的时间间隔运行异步方法

我需要从C#Web应用程序向服务发布一些数据.用户使用应用程序时会收集数据本身(一种使用情况统计信息).我不希望在每个用户的请求期间向服务发送数据,我宁愿在应用程序中收集数据,然后在一个单独的线程中发送单个请求中的所有数据,这不会满足用户的请求(我的意思是用户不必等待服务处理请求).为此,我需要一种JS的setInterval模拟 - 每隔X秒启动一次函数,将所有收集的数据刷新到服务中.

我发现Timer该类提供了一些类似的(Elapsed事件).但是,这允许只运行一次方法,但这不是一个大问题.它的主要困难是需要签名

void MethodName(object e, ElapsedEventArgs args)
Run Code Online (Sandbox Code Playgroud)

虽然我想启动异步方法,它将调用web服务(输入参数并不重要):

async Task MethodName(object e, ElapsedEventArgs args)
Run Code Online (Sandbox Code Playgroud)

任何人都可以建议如何解决所描述的任务?任何提示赞赏.

.net c# asp.net multithreading async-await

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

Windows 10为浏览器的用户代理设置了什么操作系统名称?

可以在浏览器中检查navigator.userAgent用户的操作系统.我知道我们不能依赖浏览器的用户代理,因为它可能是欺骗性的,但我们需要它仅用于统计目的.对于Windows环境,值Windows NT 6.3代表Win 8.1,Windows NT 6.2Win 8,Windows NT 6.1Win 7等等.任何人都可以建议Windows 10在用户代理中放置什么价值?
先感谢您.

javascript browser user-agent windows-10

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

保持多对多实体框架关系中的外键列表

我的代码优先实体框架模型中有多对多的关系.想象一下,我们有两个表,"公司"和"文章",它们之间有这种关系.我的简化代码模型如下所示:

public class Article
{
    public int Id { get; set; }
    public string Text { get; set; }
    public virtual ICollection<Company> Companies { get; set; }
}

public class Company
{
    public int Id { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Article> Articles { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

使用流畅的映射,我创建了多对多关系:

modelBuilder.Entity<Company>().HasMany(c => c.Articles).WithMany(a => a.Companies);
Run Code Online (Sandbox Code Playgroud)

这很好用,EF创建中间表.但是,根据我的逻辑,将每个实体与外键集合在一起会非常好.这意味着我想将以下属性添加到相应的模型类:

public virtual ICollection<int> ArticlesId { get; set; } // to Company
public virtual ICollection<int> CompaniesId { get; set; …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework entity-framework-5

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

具有空检查的C#AND运算符

我读到&&.NET 中的AND运算符有条件地计算它的第二个参数.

检查null然后检查单个语句中的某个字段是否安全?

例如,假设我们有一个SomeClass类,它有一个整数字段Id:

class SomeClass
{
   public Int32 Id { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后,我们在某处收到此类型的对象并尝试对其执行某些操作:

public void SomeMethod(SomeClass obj)
{
   if (obj != null)
      if (obj.Id == 1)
      {
         // do some actions
      }
}
Run Code Online (Sandbox Code Playgroud)

我们可以重写如下以减少代码量吗?无效检查是否安全?

public void SomeMethod(SomeClass obj)
{
   if (obj != null && obj.Id == 1)
      // do some actions
}
Run Code Online (Sandbox Code Playgroud)

c# operators

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

为什么IE10在使用javascript href单击anchor元素时触发beforeunload事件以及如何防止它

为了跟踪用户何时离开页面,我们会听取beforeunload事件.一切正常,直到用户使用IE10,在href参数中使用javascript 而不是url 点击空链接(锚点).例如:

<a href="javascript:void(0)">Empty link with JS in href</a>
Run Code Online (Sandbox Code Playgroud)

这种情况使得IE10 有时触发beforeunload事件.Chrome/IE11工作正常(0 beforeunload秒),而IE10会不时触发它,特别是如果你快速点击它.这是JSFiddle尝试它.
有谁知道它为什么会发生以及如何解决它?我很乐意在标记中删除/替换这样的锚点,但在我的情况下这是不可能的.
谢谢.

javascript anchor internet-explorer onbeforeunload internet-explorer-10

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

使用SqlDataReader从连接表中获取值

想象一下,我们在数据库中有两个表user(FK id_role)和role(PK角色).我们需要阅读有关用户及其权限的信息.

我使用以下SQL语句来执行查询:

SELECT * 
FROM [user] 
INNER JOIN role ON [user].id_role = role.id 
WHERE login = @login
Run Code Online (Sandbox Code Playgroud)

执行后,我尝试使用字符串索引器读取读取器中的值:reader[string name].

这是我需要解决的问题是重复的名字:既userrole包含,例如现场id,对此我能够读取用户(使用reader["id"]),但无法读取角色(使用reader["role.id"]).

该属性FieldCount返回12,这意味着读取了所有必填字段(user包含6个字段,也是如此role).

在这种情况下,我是否有可能按名称读取列?或者以唯一的方式使用两个查询或SQL'作为'运算符?

.net c# sql-server ado.net sqldatareader

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