我有一个类,它暴露了一个流畅的界面风格,我也想要线程安全.
目前,在类的实例上调用可链接方法会使用操作(Func<T>'s)设置各种集合.
当请求结果时,实际工作就会发生.这允许用户以任何顺序链接方法调用,以便:
var result = myFluentThing
.Execute(() => serviceCall.ExecHttp(), 5)
.IfExecFails(() => DoSomeShizzle())
.Result<TheResultType>();
Run Code Online (Sandbox Code Playgroud)
(这里,5是重试失败的服务呼叫的次数.)
显然这不是线程安全的或可重入的.
有哪些常见的设计模式可以解决这个问题?
如果必须首先调用Execute方法,我可以简单地返回一个新的类实例,但每次都可以使用,因为任何方法都可以在链中的任何一点调用,你将如何解决这个问题?
我更感兴趣的是了解解决这个问题的各种方法,而不仅仅是为了"让它正常工作".
我把完整的代码放在GitHub上,任何人都需要更广泛的背景来实现我的目标:https://github.com/JamieDixon/ServiceManager
c# fluent-interface thread-safety reentrancy method-chaining
在我AccountAuthenticatorActivity尝试addAccountExplicitly使用以下行后,为帐户设置同步选项:
ContentResolver.setIsSyncable(account, authority, 1);
ContentResolver.setSyncAutomatically(account, authority, true);
int seconds = getResources().getInteger(R.integer.syncFrequencySeconds);
ContentResolver.addPeriodicSync(account, authority, new Bundle(), seconds);
Run Code Online (Sandbox Code Playgroud)
syncFrequencySeconds设置为86400(每24小时).但我的同步适配器仍然每分钟触发一次.我究竟做错了什么?(同步本身没有任何问题)
我正在使用ASP.NET Web Api编写验证密码服务.
该服务接受当前登录用户的密码,验证它并返回编码值.这一切都发生在SSL上.
调用此方法不会导致状态更改.
最初这看起来应该是一个GET请求但是在进一步检查时我担心Web服务器记录纯文本密码.
我们可以将其作为一个实现,POST但这似乎是动作的错误动词.
这只是一个实用主义而不是程序的情况还是我们可以做更多的事情来实现实用和RESTful案例?
我们正在运行Jekins,它开始了一个吞噬构建过程.作为gulp构建过程的一部分,我们触发msbuild任务.
每隔一次构建失败并显示以下消息:
ASPNETCOMPILER:错误ASPRUNTIME:已卸载运行该线程的应用程序域.
无论构建之间的时间跨度如何,这都会发生在所有其他构建中.(即构建,失败,构建,失败).
关于可能导致这种情况的原因以及为什么它只发生在其他构建中的任何想法?
我一直在读几个人们选择使用Stack而不是递归的地方.这是因为递归被认为是完成工作的过时方式,或者这两种方法在不同的环境中同样适用吗?
我想知道处理表单处理的最佳做法是什么?
就我而言,我做了类似的事情:
我的问题是我重复表单的HTML代码3次,我不认为这是一个好习惯(长文件,难以阅读).
我有以下两个接口:
public interface IMembershipProvider
{
object Login(ILoginProviderParameters loginParameters);
void SetAuthCookie(string userName, bool createPersistentCookie);
}
public interface IFacebookMembershipProvider : IMembershipProvider{}
Run Code Online (Sandbox Code Playgroud)
和一个实现:
public class FacebookMembershipProvider: IFacebookMembershipProvider
{
public object Login(ILoginProviderParameters loginParameters)
{
// Facebook login code is here
}
public void SetAuthCookie(string userName, bool createPersistentCookie)
{
FormsAuthentication.SetAuthCookie(userName, createPersistentCookie);
}
}
Run Code Online (Sandbox Code Playgroud)
这被注入我的控制器并分配给:
private readonly IFacebookMembershipProvider _facebookMembershipProvider;
Run Code Online (Sandbox Code Playgroud)
我可以Login毫无问题地调用该方法,但是当我调用该SetAuthCookie方法时:
_facebookMembershipProvider.SetAuthCookie(user.id, false);
Run Code Online (Sandbox Code Playgroud)
我收到错误:
MyNamespace.UserManagement.Interfaces.IFacebookMembershipProvider' 不包含 'SetAuthCookie' 的定义
我用 Login 方法做了什么与我没有用 SetAuthCookie 方法做的不同?
显式转换为类型IMembershipProvier工作正常:
((IMembershipProvider)_facebookMembershipProvider).SetAuthCookie(user.id, false);
Run Code Online (Sandbox Code Playgroud)
我可能只是错过了一些基本的东西。谢谢参观。
更新
在回答 Marks 问题时,传递给该 …
我有一个简单的任务与PHP,但由于我不熟悉正则表达式或其他东西......我不知道我将要做什么.
我想要的是非常简单的......
假设我有这些变量:
$Email = 'john@example.com'; // output : ****@example.com
$Email2 = 'janedoe@example.com'; // output : *******@example.com
$Email3 = 'johndoe2012@example.com'; // output : ***********@example.com
$Phone = '0821212121'; // output : 082121**** << REPLACE LAST FOUR DIGIT WITH *
Run Code Online (Sandbox Code Playgroud)
如何用PHP做到这一点?谢谢.
鉴于以下情况:
var collection = myEnumerable as ICollection<MyType>;
Run Code Online (Sandbox Code Playgroud)
引擎盖下会发生什么?ICollection有一个伯爵财产.这个演员是否枚举了可枚举的计数或更多涉及的事情?
我想知道其他人是否也有同样的问题或是否只是我!
鉴于我有一个视图Purchases.aspx和一个局部视图Purchases.ascx:
在Purchases.aspx如果我这样做:Html.RenderPartial("Purchases")那么WebDev.WebServer40.exe基本关闭.
我猜这是由Stack Overflow引起的,因为RenderPartial无法确定它应该呈现什么(.aspx或.ascx).
这是一个错误,它是一个定义的行为,还是只是发生在我身上?