本文整理汇总了C#中DreamContext.SetState方法的典型用法代码示例。如果您正苦于以下问题:C# DreamContext.SetState方法的具体用法?C# DreamContext.SetState怎么用?C# DreamContext.SetState使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类DreamContext
的用法示例。
在下文中一共展示了DreamContext.SetState方法的10个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Prologue
private Yield Prologue(DreamContext context, DreamMessage request, Result<DreamMessage> response)
{
_log.Debug("in prologue");
if("disposal".EqualsInvariant(context.Feature.Signature) && context.IsTaskEnvDisposed) {
throw new Exception("context disposed in prologue");
}
PrologueData = StringUtil.CreateAlphaNumericKey(8);
_log.DebugFormat("setting prologue data in Env #{0}", TaskEnv.Current.GetHashCode());
context.SetState("prologue", PrologueData);
response.Return(DreamMessage.Ok());
yield break;
}
示例2: Ping
public Yield Ping(DreamContext context, DreamMessage request, Result<DreamMessage> response)
{
var guid = Guid.NewGuid();
ContextVar = new ContextLifeSpan(guid);
context.SetState(ContextVar);
response.Return(DreamMessage.Ok());
yield break;
}
示例3: Spawn
public Yield Spawn(DreamContext context, DreamMessage request, Result<DreamMessage> response)
{
var guid = Guid.NewGuid();
ContextVar = new ContextLifeSpan(guid);
context.SetState(guid);
context.SetState(ContextVar);
ContextLifeSpan capturedInner = null;
yield return Async.Fork(() =>
{
var innerContextVar = DreamContext.Current.GetState<ContextLifeSpan>();
capturedInner = innerContextVar;
if(innerContextVar == ContextVar) {
throw new Exception("spawned context instances were same");
}
if(innerContextVar.Guid != guid) {
throw new Exception("spawned context guid is wrong");
}
if(innerContextVar.IsDisposed) {
throw new Exception("subcall: context is disposed");
}
}, new Result());
var contextVar = context.GetState<ContextLifeSpan>();
if(contextVar == null) {
throw new Exception("context instance is gone");
}
if(capturedInner == contextVar) {
throw new Exception("outer instance was changed to inner");
}
if(!capturedInner.IsDisposed) {
throw new Exception("inner instance wasn't disposed after closure completion");
}
if(contextVar.Guid != guid) {
throw new Exception("context guid is wrong");
}
if(contextVar != ContextVar) {
throw new Exception("context instance changed");
}
if(contextVar.IsDisposed) {
throw new Exception("context is disposed");
}
response.Return(DreamMessage.Ok());
yield break;
}
示例4: CheckEpilogue
public Yield CheckEpilogue(DreamContext context, DreamMessage request, Result<DreamMessage> response)
{
EpilogueData = StringUtil.CreateAlphaNumericKey(8);
_log.DebugFormat("setting epilogue data in Env #{0}", TaskEnv.Current.GetHashCode());
context.SetState("epilogue", EpilogueData);
response.Return(DreamMessage.Ok());
yield break;
}
示例5: Exception
public Yield Exception(DreamContext context, DreamMessage request, Result<DreamMessage> response)
{
_log.Debug("in exception feature");
var guid = Guid.NewGuid();
ContextVar = new ContextLifeSpan(guid);
context.SetState(ContextVar);
throw new CustomException();
}
示例6: CallPlug
public Yield CallPlug(DreamContext context, DreamMessage request, Result<DreamMessage> response)
{
_log.Debug("callplug start");
var guid = Guid.NewGuid();
ContextVar = new ContextLifeSpan(guid);
context.SetState(guid);
_log.Debug("setting disposable state");
context.SetState(ContextVar);
Result<DreamMessage> sub;
_log.Debug("calling plug");
yield return sub = Self.At("calledplug").GetAsync();
_log.Debug("return from plug");
if(!sub.Value.IsSuccessful) {
response.Return(sub.Value);
}
var contextVar = context.GetState<ContextLifeSpan>();
if(contextVar == null) {
throw new Exception("context instance is gone");
}
if(contextVar.Guid != guid) {
throw new Exception("context guid is wrong");
}
if(contextVar != ContextVar) {
throw new Exception("context instance changed");
}
if(contextVar.IsDisposed) {
throw new Exception("context is disposed");
}
_log.Debug("callplug return");
response.Return(DreamMessage.Ok());
_log.Debug("callplug end");
yield break;
}
示例7: CalledPlug
public Yield CalledPlug(DreamContext context, DreamMessage request, Result<DreamMessage> response)
{
_log.Debug("calledplug start");
var contextVar = context.GetState<ContextLifeSpan>();
if(contextVar != null) {
throw new Exception("called plug context instance already exists");
}
context.SetState(new ContextLifeSpan(Guid.NewGuid()));
_log.Debug("calledplug return");
response.Return(DreamMessage.Ok());
_log.Debug("calledplug end");
yield break;
}
示例8: CallCoroutine
public Yield CallCoroutine(DreamContext context, DreamMessage request, Result<DreamMessage> response)
{
_log.Debug("callcoroutine start");
var guid = Guid.NewGuid();
ContextVar = new ContextLifeSpan(guid);
context.SetState(guid);
context.SetState(ContextVar);
if(context.GetState<ContextLifeSpan>() == null) {
throw new Exception("context instance was never set");
}
_log.DebugFormat("callcoroutine calling coroutine within Env #{0}", TaskEnv.Current.GetHashCode());
yield return Coroutine.Invoke(SubCall, new Result());
var contextVar = context.GetState<ContextLifeSpan>();
_log.DebugFormat("callcoroutine coroutine returned within Env #{0}", TaskEnv.Current.GetHashCode());
if(contextVar == null) {
throw new Exception("context instance is gone");
}
if(contextVar.Guid != guid) {
throw new Exception("context guid is wrong");
}
if(contextVar != ContextVar) {
throw new Exception("context instance changed");
}
if(contextVar.IsDisposed) {
throw new Exception("context is disposed");
}
response.Return(DreamMessage.Ok());
yield break;
}
示例9: SubmitRequestAsync
//.........这里部分代码省略.........
_log.WarnMethodCall("ProcessRequest: feature not found", msg);
result = DreamMessage.NotFound("resource not found");
} else {
string msg = verb + " " + uri.ToString(false);
_log.WarnMethodCall("ProcessRequest: method not allowed", msg);
List<string> methods = new List<string>();
foreach(DreamFeature entry in features) {
if(!methods.Contains(entry.Verb)) {
methods.Add(entry.Verb);
}
}
methods.Sort(StringComparer.Ordinal.Compare);
result = DreamMessage.MethodNotAllowed(methods.ToArray(), "allowed methods are " + string.Join(", ", methods.ToArray()));
}
response.Return(result);
// decrease counter for external requests
EndRequest(completion, uri, request);
return response;
}
// add uri to aliases list
if(_memorizeAliases) {
lock(_aliases) {
_aliases[transport] = transport;
_aliases[publicUri] = publicUri;
}
}
// create context
DreamContext context = new DreamContext(this, verb, localFeatureUri, feature, publicUri, _publicUri, request, CultureInfo.InvariantCulture, GetRequestLifetimeScopeFactory(feature.Service));
// attach request id to the context
context.SetState(DreamHeaders.DREAM_REQUEST_ID, request.Headers.DreamRequestId);
// add user to context
context.User = user;
// build linked-list of feature calls
var chain = new Result<DreamMessage>(TimeSpan.MaxValue, TaskEnv.Current).WhenDone(result => {
// extract message
DreamMessage message;
if(result.HasValue) {
message = result.Value;
} else if(result.Exception is DreamAbortException) {
message = ((DreamAbortException)result.Exception).Response;
} else if(result.Exception is DreamCachedResponseException) {
message = ((DreamCachedResponseException)result.Exception).Response;
} else {
_log.ErrorExceptionFormat(response.Exception, "Failed Feature '{0}' Chain [{1}:{2}]: {3}",
feature.MainStage.Name,
verb,
localFeatureUri.Path,
response.Exception.Message
);
message = DreamMessage.InternalError(result.Exception);
}
// decrease counter for external requests
EndRequest(completion, uri, request);
// need to manually dispose of the context, since we're already attaching and detaching it by hand to TaskEnvs throughout the chain
if(response.IsCanceled) {
_log.DebugFormat("response for '{0}' has already returned", context.Uri.Path);
response.ConfirmCancel();
示例10: PrologueStats
private Yield PrologueStats(DreamContext context, DreamMessage request, Result<DreamMessage> response) {
var sw = Stopwatch.StartNew();
context.SetState("stats-stopwatch", sw);
response.Return(request);
yield break;
}