我正在教我的孩子编程,看起来我已经把它缩小到两个选项:
我找不到任何"当前"的比较,所以我想我会问:
哪个更好的jME3 +或Unity4.3 +用于教学编程与引擎优势?
我不是游戏开发人员,但作为一名企业和控制系统开发人员,我在C#和Java方面都有经验.
我目前倾向于使用Unity4.3 +,因为:
从编程的角度来看,我认为C#比Java更干净,但如果引擎编码和对象模型鼓励编程不好,这意味着很少
引擎优势:Unity4.3 +将"据称"即将支持XBox One和PS4
注意:为了公平对待jME,我会记下jME的这个"pre-alpha state"iOS选项,它比营销"假设"更好:(http://hub.jmonkeyengine.org/wiki/doku.php/jme3:ios)
如果在所有其他方面它们相同,哪一个具有更好的服务集成?
如何修复依赖项注入,以便可以.ForContext(...)在我的工作人员/服务类中进行访问?
[.Net Core 6 用于混合控制台/WindowsService 应用程序]
在我的主程序类和工作/服务类中,我让 Serilog 正确工作以进行基本日志记录...
程序.cs
Log.Information($"Application Directory: {baseDir}");
Run Code Online (Sandbox Code Playgroud)
工人.cs
_logger.LogInformation("Service Starting");
Run Code Online (Sandbox Code Playgroud)
服务A.cs
_logger.LogInformation("In Service A");
Run Code Online (Sandbox Code Playgroud)
然而,我遇到的问题是我需要 .ForContext 也能够在任何地方工作......并且它在我的主程序类中:
程序.cs
Log
.ForContext("EventID", 42)
.Information("Log This with EventID === 42");
Run Code Online (Sandbox Code Playgroud)
...但是,当我尝试在任一工作人员/服务类中执行相同操作时...
工人.cs
_logger
.ForContext("EventID", 42)
.Information("Log This with EventID === 42");
Run Code Online (Sandbox Code Playgroud)
...它不起作用,我收到以下错误:
错误CS1061
'ILogger<Worker>' does not contain a definition for 'ForContext' and no accessible extension method 'ForContext' accepting a first argument of type 'ILogger<Worker>' could be found
Run Code Online (Sandbox Code Playgroud)
...所以我对此进行了调查,并遇到了以下非常接近的问题(这两个问题我都无法应用,请参阅下面代码中的注释):
(注意:虽然我想了解 .Net 4.0 的未来想法,但该项目仅限于 .Net 3.5。)
我有一个线程,它从外部设备异步读取数据(在代码示例中由非常有创意的 strSomeData 模拟:-)并将其存储在 StringBuilder“缓冲区”中(strBuilderBuffer :-)
在“主代码”中,我想“蚕食”这个“缓冲区”。但是,从“操作”的角度来看,我不确定如何以线程安全的方式执行此操作。我理解从“数据”角度来看它是安全的,因为根据 msdn,“此 ( StringBuilder) 类型的任何公共静态成员都是线程安全的。任何实例成员都不能保证是线程安全的。” 但是,我下面的代码说明从“操作”角度来看它可能不是线程安全的。
关键是我担心两行代码:
string strCurrentBuffer = ThreadWorker_TestThreadSafety_v1a.strBuilderBuffer.ToString();
// Thread 'randomly' slept due to 'inconvenient' comp resource scheduling...
ThreadWorker_TestThreadSafety_v1a.strBuilderBuffer.Length = 0;
Run Code Online (Sandbox Code Playgroud)
如果计算机操作系统在缓冲区的“读取”和缓冲区的“清除”之间让我的线程休眠,我可能会丢失数据(这很糟糕:-(
有没有办法保证“原子性”?这两行并强制计算机不中断它们?
关于弗拉德下面关于使用 的建议lock,我尝试过,但没有成功(真的):
public void BufferAnalyze()
{
String strCurrentBuffer;
lock (ThreadWorker_TestThreadSafety_v1a.strBuilderBuffer)
{
strCurrentBuffer = ThreadWorker_TestThreadSafety_v1a.strBuilderBuffer.ToString();
Console.WriteLine("[BufferAnalyze()] ||<< Thread 'Randomly' Slept due to comp resource scheduling");
Thread.Sleep(1000); // Simulate poor timing of thread resourcing...
ThreadWorker_TestThreadSafety_v1a.strBuilderBuffer.Length = 0;
}
Console.WriteLine("[BufferAnalyze()]\r\nstrCurrentBuffer[{0}] == {1}", strCurrentBuffer.Length.ToString(), …Run Code Online (Sandbox Code Playgroud)