在C#中,使用委托异步地执行某些工作(调用BeginInvoke())和使用ThreadPool线程之间有任何区别,如下所示
public void asynchronousWork(object num)
{
//asynchronous work to be done
Console.WriteLine(num);
}
public void test()
{
Action<object> myCustomDelegate = this.asynchronousWork;
int x = 7;
//Using Delegate
myCustomDelegate.BeginInvoke(7, null, null);
//Using Threadpool
ThreadPool.QueueUserWorkItem(new WaitCallback(asynchronousWork), 7);
Thread.Sleep(2000);
}
Run Code Online (Sandbox Code Playgroud)
编辑:
BeginInvoke确保线程池中的线程用于执行异步代码,所以有什么区别吗?
如何防止在派生类中重写方法?
在Java中,我可以通过final
在我希望防止被覆盖的方法上使用修饰符来实现此目的.
我如何在C#中实现同样的目标?
我知道使用sealed
但显然我只能用override
关键字吗?
class A
{
public void methodA()
{
// Code.
}
public virtual void methodB()
{
// Code.
}
}
class B : A
{
sealed override public void methodB()
{
// Code.
}
}
Run Code Online (Sandbox Code Playgroud)
所以在上面的例子中,我可以防止methodB()
被派生自类的任何类重写B
,但是如何防止类首先B
覆盖methodB()
?
更新:当我发布此问题时,我错过了A类声明中的virtual
关键字methodB()
.纠正了它.
我试图第一次使用互斥锁,并在程序的两个单独的实例上执行以下代码
public void asynchronousCode()
{
using (var mutex = new Mutex(false, "mySpecialMutex"))
{
if (!mutex.WaitOne(1000, false))
{
Console.WriteLine("First check - some one locked the mutex");
}
if (!mutex.WaitOne(3000, false))
{
Console.WriteLine("Second check- some one locked the mutex");
}
else
{
Console.WriteLine("I got the mutex");
Console.WriteLine("sleeping");
Thread.Sleep(3000);
Console.WriteLine("Awaking and Releasing mutex");
mutex.ReleaseMutex();
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行它时,其中一个实例(我先运行的那个)打印出来
I got the mutex
sleeping
awaking and releasing mutex
Run Code Online (Sandbox Code Playgroud)
另一个实例打印
First check - some one locked the mutex
Run Code Online (Sandbox Code Playgroud)
一旦第一个实例租用互斥锁,它就会在第二个等待语句崩溃时出现异常
The wait completed due to an …
Run Code Online (Sandbox Code Playgroud) c# multithreading mutex multiprocessing abandonedmutexexception
嗨,我试图与实体框架一起使用交易.由于在线提供了大量有关实施交易的不同方式的信息,我必须说我在正确的方式上有点困惑.我有一个带有两个表Employee和Company的示例数据库.Employee表有一个引用公司Id的外键.考虑到我想要实现一个事务,我将一条记录插入到Company表中,然后一条记录到Employee表,我想这样做,这样只有两个记录都成功时才插入记录我有以下代码.
public void addCompanyToDatabase()
{
using (var context = new myTestEntities())
{
context.Connection.Open(); //added this as was getting the underlying
//provider failed to open
using (TransactionScope scope = new TransactionScope())
{
try
{
Company c = new Company();
c.Name = "xyz";
context.Companies.AddObject(c);
context.SaveChanges();
//int a = 0;
//int b = 5 / a;
Employee e = new Employee();
e.Age = 15;
e.Name = "James";
e.CompanyId = c.Id;
context.Employees.AddObject(e);
context.SaveChanges();
scope.Complete();
}
catch (Exception ex)
{
Console.WriteLine("Exception Occurred");
}
}
} …
Run Code Online (Sandbox Code Playgroud) 我在过去的几天里一直在阅读有关实体框架的内容,并且设法得到了一个使用它的公平想法,但我仍然有一些问题,其中一些可能看起来有点过于基本.为了透视,我在asp.net Web应用程序中使用实体框架4.0.如果您可以回答任何问题,请继续.
使用POCO模板可以获得什么好处.我理解,如果我希望得到持久性的无知并让我的实体清楚地了解与存储相关的任何信息POCO实体是可行的方法.在使用POCO实体时,我可以相对轻松地从实体框架切换到说NHibernate吗?除了疏松耦合之外,我有任何重要的理由去POCO实体.另外,如果我使用POCO,我最终会失去任何东西.在代理的帮助下,我仍然可以获得更改跟踪和延迟加载?
通常的做法是使用EF模型的实体作为数据传输对象或业务对象.例如,我有一个单独的类库用于我的实体模型.假设我正在使用MVP,我想要一个公司的员工列表.演示者将请求我的业务逻辑函数,该函数将查询实体模型以获取Employee列表,并将实体列表返回给演示者.在这种情况下,我的演示者需要引用EF模型.这是正确的方法吗?在我的asp.net web applciation的情况下,它不应该是一个问题,但如果我使用Web服务,这是如何工作的?这是走向POCO实体的原因吗?
假设Employee实体具有公司表的导航属性.如果我在'using'块中使用并包装数据上下文,并尝试访问BL中的导航属性,我假设我会得到一个异常.如果我关闭延迟加载并使用'include'linq查询获取实体,我是否也会得到异常?在之前的帖子中,有人建议我每个请求使用一个上下文,暗示即使我在BL中,上下文仍保持活动状态.我假设我仍然需要分离对象并将其附加到我的下一个请求的上下文中,如果我希望坚持我做出的任何更改?或者我应该用新的上下文再次查询对象并更新它?
这个问题更多地与组织文件/最佳实践有关,并且是我之前发布的问题的后续问题.当我使用基于实体的单独文件来组织我的数据访问层时,组织涉及多个表之间的连接的查询的最佳实践是什么.我对组织仍然有些模糊.尝试过在网上搜索但没有太多帮助.