我有一个类作为数据库层之上的一个层,以方便数据库访问,它工作得很好。 但是现在我想要从数据库中读取的所有方法都可以异步访问,而没有任何危险的危险。所以我认为,如果我只用“read”方法实现接口,那么当从异步线程进行工作时,我可以引用该接口而不是普通类。异步方法的继承接口,最佳实践
有没有更好的(但希望相似)的方式来实现这一点?
这里是我多远尝试过的例子,但没有成功:
// My two interfaces.
// The UserCoreManager class is the layer that works with the database
// layer for the users table.
// but the IUserCoreManagerAsync only reference the async friendly methods.
public interface IUserCoreManagerAsync
{
User GetData();
}
public interface ICoreAsync
{
IUserCoreManagerAsync User { get; }
}
到目前为止,一切都很好。通过引用ICoreAsync接口中的用户,我会理论上只能获取数据而不保存任何内容吗?
下面是我实现的接口实际类的样子:
public class UserCoreManager : IUserCoreManagerAsync
{
public User GetData()
{
...
}
public User SetData()
{
...
}
}
public partial class Core : ICoreAsync
{
private UserCoreManager user;
public UserCoreManager User // <- This is the tricky part
{
get
{
return user;
}
protected set
{
user = (UserCoreManager)value;
}
}
}
正如你所看到的,UserCoreManager有一个setData()方法,所以它不闯民宅太接口工作时也不会线程对我来说很安全。 但正如你也可以看到的,我没有实现接口属性返回一个IUserCoreManagerAsync,但我有点希望UserCoreManager属性可以做到这一点。
你会如何做到这一点?我的目标是要实现这样的使用这些类时:
public void DoSomeAsyncWork(ICoreAsync core)
{
var myData = core.User.GetData();
}
public void DoSomeWork(Core core)
{
core.User.SetData("some data");
}
这样,我有实际的同一个对象,但根据我把它送给哪些方法,我怎么投的话,他们可以强制与他们一起工作线程安全与否。
你的问题实在是不清楚。 *“我希望从数据库中读取的所有方法能够异步访问,而不会冒任何危险的危险”*是什么意思?您的示例中没有显示异步行为,什么是“有些危险”? – 2014-09-04 21:30:03
@ScottChamberlain:抱歉不清楚。异步行为是在这个代码的上一层完成的,但我希望Core-object是相同的,但取决于它是否在主线程上或者不是通过强制转换(在我上一个代码示例中可以看到),它们的行为有所不同。 – einord 2014-09-04 21:33:01