我在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#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)
任何人都可以建议如何解决所描述的任务?任何提示赞赏.
可以在浏览器中检查navigator.userAgent用户的操作系统.我知道我们不能依赖浏览器的用户代理,因为它可能是欺骗性的,但我们需要它仅用于统计目的.对于Windows环境,值Windows NT 6.3代表Win 8.1,Windows NT 6.2Win 8,Windows NT 6.1Win 7等等.任何人都可以建议Windows 10在用户代理中放置什么价值?
先感谢您.
我的代码优先实体框架模型中有多对多的关系.想象一下,我们有两个表,"公司"和"文章",它们之间有这种关系.我的简化代码模型如下所示:
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) 我读到&&.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) 为了跟踪用户何时离开页面,我们会听取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
想象一下,我们在数据库中有两个表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].
这是我需要解决的问题是重复的名字:既user和role包含,例如现场id,对此我能够读取用户(使用reader["id"]),但无法读取角色(使用reader["role.id"]).
该属性FieldCount返回12,这意味着读取了所有必填字段(user包含6个字段,也是如此role).
在这种情况下,我是否有可能按名称读取列?或者以唯一的方式使用两个查询或SQL'作为'运算符?
c# ×5
.net ×2
asp.net ×2
async-await ×2
javascript ×2
ado.net ×1
anchor ×1
asynchronous ×1
browser ×1
c#-5.0 ×1
operators ×1
sql-server ×1
user-agent ×1
windows-10 ×1