使用EntityFramework v6,我整理了一个原型来演示Web Api和桌面应用程序中的并发检查.
实体:
public static class IRowVersionExtensions
{
public static string RowVersionAsString(this IRowVersion ivr)
{
return Convert.ToBase64String(ivr.RowVersion);
}
public static void SetRowVersion(this IRowVersion ivr, string rowVersion)
{
ivr.RowVersion = Convert.FromBase64String(rowVersion);
}
}
public interface IRowVersion
{
byte[] RowVersion { get; set; }
}
public class Department : IRowVersion
{
[Key]
public int Id { get; set; }
[Required, MaxLength(255)]
public string Name { get; set; }
public string Description { get; set; }
[Timestamp]
[ConcurrencyCheck]
public byte[] RowVersion { …Run Code Online (Sandbox Code Playgroud) 场景如下:
我有一个功能,允许用户向其他用户发送消息。消息的发送是在异步操作中完成的:
public async Task<IActionResult> CreateMessage
此操作按顺序执行以下操作:
动作的最后两行如下:
_notificationHubProxy.SendNotification(messageToReturnResource.SenderName, messageToPush, recipientId);
return Ok(messageToReturnResource);
Run Code Online (Sandbox Code Playgroud)
SendNotification 是异步的,但我选择不等待它以避免因等待请求完成而导致 UI 锁定。目前这一切似乎都运行良好。
我的问题实际上如下:这是 oky(即不等待),还是这是一个编写错误代码的示例,当我有很多客户端使用该应用程序时会导致问题?
问候
我有盒装元组:
(int, string) tuple = (1, "abc");
object box = tuple;
Run Code Online (Sandbox Code Playgroud)
如何从中获取元组box?强制object返回元组的正确语法是什么?
我的尝试:
var deconstruct = (int, string)box;
Run Code Online (Sandbox Code Playgroud)
显然是错误的:
错误CS1525无效的表达式术语'int'
错误CS1525无效的表达式术语“字符串”
错误CS1002; 预期
错误CS0201仅赋值,调用,递增,递减,等待和新对象表达式可以用作语句
为什么这个c#代码会抛出一个null异常?
bool boolResult = SomeClass?.NullableProperty.ItsOkProperty ?? false;
Run Code Online (Sandbox Code Playgroud)
一旦NullableProperty评估为null,elvis运营商是否应该停止评估(短路)?
根据我的理解,上面的代码行是一个快捷方式:
bool boolResult
if(SomeClass != null)
if(SomeClass.NullableProperty != null)
boolResult = SomeClass.NullableProperty.ItsOkProperty;
else
boolResult = false;
else
boolResult = false;
Run Code Online (Sandbox Code Playgroud)
我错了吗?
编辑:现在我明白为什么我弄错了,代码行实际上转换为类似于:
bool boolResult
if(SomeClass != null)
boolResult = SomeClass.NullableProperty.ItsOkProperty;
else
boolResult = false;
Run Code Online (Sandbox Code Playgroud)
因为NullableProperty为空而抛出...
考虑以下代码:
for(int i = 0; i < 10; i ++)
{
new Thread(() => Test(i)).Start();
}
Run Code Online (Sandbox Code Playgroud)
该Test(int i)函数:
public void Test(int i)
{
Console.WriteLine("=== Test " + i);
}
Run Code Online (Sandbox Code Playgroud)
实际输出:
===测试3
===测试4
===测试4
===测试5
===测试5
===测试5
===测试9
===测试9
===测试9
===测试10
你可以看到一些数字丢失了,其他一些数据被复制了.
预期产量:
我希望以随机顺序看到所有数字.
题
我应该锁定任何变量/方法吗?我怎样才能解决这个问题?
我想使用.NET CoreCLR运行一个hello-world控制台应用程序.
到目前为止,我的代码如下.
// Program.cs
using System;
namespace Study
{
public class Program
{
public void Main()
{
Console.WriteLine("Hello world!");
}
}
}
Run Code Online (Sandbox Code Playgroud)
// project.json
{
"frameworks": {
"dnxcore50": { }
}
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用命令运行此项目:
dnvm use 1.0.0-beta8 -r coreclr
dnx run
Run Code Online (Sandbox Code Playgroud)
但是,这会产生以下错误:
Microsoft.Dnx.Compilation.CSharp.RoslynCompilationException: warning CS8021: No value for RuntimeMetadataVersion found. No assembly containing System.Object was found nor was a value for RuntimeMetadataVersion specified through options.
(1,11): DNXCore,Version=v5.0 error CS0246: The type or namespace name 'System' could not be found …Run Code Online (Sandbox Code Playgroud) 昨天我在 Visual Studio 上使用 WindowsService 项目选项,在尝试安装我的服务时遇到了错误,经过几次尝试后,我终于想到我可能需要管理员权限才能安装服务。当我切换到“以管理员身份运行”时,它确实安装了。但它让我想到的是,其他程序,如 PunkBuster、AMD 驱动程序、Adobe Acrobat 更新服务、Filezilla Server FTP 等等,如何能够通过简单地运行可执行文件而不显示任何内容来安装服务?请求管理员权限的窗口类型?我的意思是,如果我真的想要,我将如何对我创建的应用程序做同样的事情?
我知道我可以通过这种方式添加丰富器:
{
"Serilog": {
"Using": [
"Serilog",
"Serilog.Enrichers.Environment",
"Serilog.Enrichers.Process",
...
],
"Enrich": [
"FromLogContext",
"WithMachineName",
"WithProcessId"
]
...
Run Code Online (Sandbox Code Playgroud)
我可以对房产 ( ApplicationName) 做同样的事情吗?
我有这个型号:
public class Blog
{
public int ID { get; set; }
public string Title { get; set; }
}
public class Post
{
public int ID { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public int BlogID { get; set; }
public Blog Blog { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
有这个配置:
public class BlogMap : EntityTypeConfiguration<Blog>
{
public BlogMap()
{
this.ToTable("Blogs", "dbo");
this.HasKey(t => t.ID);
this.Property(t => t.ID).HasColumnName("ID");
this.Property(t => …Run Code Online (Sandbox Code Playgroud) 以下(C#Interactive)编译但会爆炸.不确定我错过了什么......
class Test { public Func<object> GetSomething = null; }
var t = new Test();
var result = t?.GetSomething();
Run Code Online (Sandbox Code Playgroud) 我有基于事件的API(Geolocator),我想转换为Rx.
问题是某些操作要求取消订阅所有事件,并且我不想将该burdon传递给Rx API的用户.
因此,用户将订阅一些可观察对象,并且当订阅事件时,它们将被发布到那些可观察对象.
最好的方法是什么?
我想到了创建用户订阅的主题,然后通过另一组可观察对象将事件发布给那些主题.
这是最好的方法吗?如果是这样,怎么样?
c# ×4
.net ×2
c#-6.0 ×2
asp.net-mvc ×1
async-await ×1
asynchronous ×1
c#-7.0 ×1
concurrency ×1
coreclr ×1
knockout.js ×1
serilog ×1
tuples ×1
unboxing ×1
windows ×1