/// <summary> /// Ilmoittaa että scripti tulisi kääntää uusiksi. /// </summary> public void Notify(ScriptEngine scriptEngine) { // Kääntää scriptin rinnakkain. if (IsParallel) { ParallelScriptBuilder myParallelBuilder = ScriptBuilder as ParallelScriptBuilder; ParallelScriptBuilder parallelScriptBuilder = new ParallelScriptBuilder( myParallelBuilder.ScriptName, myParallelBuilder.ClassName, myParallelBuilder.ScriptArguments, myParallelBuilder.DepencyObject, (script, builder) => { // Kutsutaan alkuperäisen builderin callback jos sellainen on // ja samalla otetaan uusi scripti kiinni lopussa. if (myParallelBuilder.ScriptResolvedCallback != null) { myParallelBuilder.ScriptResolvedCallback(script, builder); } this.script = (T)script; }); } else { // Kääntää scriptin blokkaavasti. script = scriptEngine.GetScript <T>(ScriptBuilder); } }
// Ottaa resolvatun scriptin sisään ja scriptbuilderin jota käytettiin resolvauksessa. // Suorittaa scriptin callback metodin. private void ExecuteCallback(ParallelScriptBuilder parallelScriptBuilder, IScript script) { if (parallelScriptBuilder.ScriptResolvedCallback != null) { parallelScriptBuilder.ScriptResolvedCallback(script, parallelScriptBuilder); } }
public void BeginResolve <T>(ParallelScriptBuilder scriptBuilder) where T : IScript { ParallelResolverDelegate <T> resolverDelegate = StartResolving <T>; ParallelWorkItem <T> parallelScriptWorker = new ParallelWorkItem <T>() { ParallelScriptBuilder = scriptBuilder, ParallelResolveDelegate = resolverDelegate, AsyncResult = resolverDelegate.BeginInvoke(scriptBuilder, null, null) }; pendingResolves.Add(parallelScriptWorker); }
/// <summary> /// Yrittää luoda halutun scriptin annetuilla tiedoilla ja luo siitä instanssin. /// Tätä resolvausta varten avataan uusi säije, joten se ei ole blokkaava. /// Kutsu ei aiheuta viivettä. /// </summary> /// <typeparam name="T">Halutun scriptin tyyppi.</typeparam> /// <param name="parallelScriptBuilder">Builder joka sisältää tarvittavat tiedot scriptin luomiseen.</param> public void MakeScript <T>(ParallelScriptBuilder parallelScriptBuilder) where T : IScript { parallelScriptResolver.LoggingMethod = LoggingMethod; parallelScriptResolver.BeginResolve <T>(parallelScriptBuilder); }