Version 1.8 (23. Aug 2012)

  • CHG: Added support for Visual Studio 2012 RTM and .NET Framework 4.5 RTM. All assemblies are provided for both .NET Framework 4 and .NET Framework 4.5. Assemblies targeting .NET Framework 4 are compiled against the latest CTP version of System.Threading.Tasks.Dataflow (version 1.0.4303). Assemblies targeting .NET Framework 4.5 are compiled against version 4.5.6 available via NuGet (Microsoft.TPL.Dataflow).

amarok.common

  • CHG: [Breaking] Re-designed base class CompletableObject. The overridable method OnCompleting(..) is no longer available. The overridable method OnComplete(..) now returns a Task, which is used to signal completion. The implementation of OnComplete(..) should return as fast as possible and perform as much work as possible asynchronously without blocking the calling thread.

  • NEW: Introduced ILazyProgress, an interface derived from IProgress, which defines a provider for progress updates that features the lazy creation of progress values.

  • NEW: Introduced IntervalConstrainedProgress, which represents a decorator around IProgress that constrains the number of progress updates based on a configurable minimum time interval between two progress updates. This type can be used to reduce the number of progress updates of existing progress providers. This type implements both ILazyProgress and IProgress.

  • NEW: Introduced NullProgress, which silently ignores any reported progress value. This type implements both ILazyProgress and IProgress.

  • NEW: The extension method FindBaseException(..) on Exception is now also available as Helper.FindBaseException(exception).

  • NEW: Introduced method Helper.GetInnerMostException(..) and a corresponding extension method GetInnerMostException(..) on Exception.

  • NEW: Introduced NullTaskCompletionSource, which is a simple wrapper around TaskCompletionSource for the sole purpose of signaling completion via the returned Task. It is not possible to complete the Task in a cancelled or faulted state.

  • NEW: Added FromResult(..) to TaskHelper. On .NET 4.5 Task.FromResult(..) is called. On .NET 4 the method is implemented using a TaskCompletionSource.

amarok.agents

  • FIX: A thread-blocking implementation of the complete pattern in most objects (runtime, subsystem, agent, etc.) caused a delay of a few seconds when shutting down a runtime with a few subsystems and a few agents. This has been fixed. Now all completable objects are capable to tear down asynchronously; without blocking threads.
Agents
  • NEW: Introduced support for async message handler. Methods marked with the MessageHandlerAttribute can now use the async modifier, but have to change the return type from void to Task (System.Threading.Tasks.Task). It is ensured that code portions (continuations) after awaits will run in the correct execution context, for example concurrent or exclusive execution.

    [MessageHandler, ConcurrentExecution]
    private async Task MyAsyncHandler(MyMessage message)
    {
        await Task.Delay(1000);
    }
    
  • NEW: Introduced support for async information handler. Methods marked with the InformationHandlerAttribute can now use the async modifier, but have to change the return type from void to Task (System.Threading.Tasks.Task). It is ensured that code portions (continuations) after awaits will run in the correct execution context, for example concurrent or exclusive execution.

    [InformationHandler, ConcurrentExecution]
    private async Task MyAsyncHandler(MyInformation message)
    {
        await Task.Delay(1000);
    }
    
  • NEW: Introduced support for async operation handler. Methods marked with the OperationHandlerAttribute can now use the async modifier, but have to change the return type from TResult to Task (System.Threading.Tasks.Task). It is ensured that code portions (continuations) after awaits will run in the correct execution context, for example concurrent or exclusive execution.

    public class MyOperation<String, Int32>
    {
    }
    
    
    [OperationHandler, ConcurrentExecution]
    private async Task<String> MyAsyncHandler(MyOperation message)
    {
        await Task.Delay(1000);
        return "done";
    }
    
Runtime
  • CHG: [Breaking] Changed Runtime to Runtime. It is now required to specify the runtime environment type as generic type argument. Various type members will use TEnvironment instead of RuntimeEnvironment.

  • CHG: [Breaking] The method Start() on Runtime now throws an InvalidOperationException (instead of ObjectDisposedException) when the method is called after the runtime has been shut down.

  • CHG: [Breaking] The method Start() on Runtime now throws a RuntimeStartException when starting the runtime fails. Refer to the inner exception for more details.

  • NEW: Added overloaded method PublishOperation(..) to Runtime.

  • CHG: [Breaking] The overloaded method LoadSubsystem(..) on Runtime now throws an InvalidOperationException (instead of ObjectDisposedException) when the method is called after the runtime has been shut down.

  • CHG: [Breaking] The overloaded method LoadSubsystem(..) on Runtime now throws a SubsystemLoadException (instead of MissingMethodException) when loading a subsystem fails. Refer to the inner exception for more details.

Subsystem
  • CHG: [Breaking] Changed Subsystem to Subsystem. It is now required to specify the runtime environment type as generic type argument. Various type members will use TEnvironment instead of RuntimeEnvironment.

  • CHG: [Breaking] The method Load() on ISubsystem now throws a SubsystemLoadException (instead of MissingMethodException) when loading a subsystem fails. Refer to the inner exception for more details.

  • CHG: [Breaking] The overloaded method LoadSubsystem(..) on Subsystem now throws a SubsystemLoadException (instead of MissingMethodException) when loading a subsystem fails. Refer to the inner exception for more details.

  • CHG: [Breaking] Introduced overrideable method OnCleanup() on Subsystem, which can be overridden to implement custom cleanup logic. For full control over the completion one can override OnComplete(..) or OnCompleted(). For simple cleanup tasks OnCleanup() should be suitable.

  • CHG: [Breaking] The overloaded method LoadSubsystem() on SubsystemFactory now throws a SubsystemLoadException (instead of MissingMethodException) when loading a subsystem fails. Refer to the inner exception for more details.

amarok.presentation

  • NEW: Introduced base classes for implementing custom value converters. You can use either ValueConverter<..> to implement a value converter that is very specific, must be instantiated and cannot be shared by multiple data bindings, or you can derive from MarkupExtensionValueConverter<..> which is a value converter and markup extension at the same time, allowing the converter to be used without instantating it first in XAML. But this kind of value converter must be state-less, meaning a single instance must be able to serve multiple data bindings at the same time.

  • CHG: [Breaking] Reworked all existing value converters to derive from either ValueConverter<..> or MarkupExtensionValueConverter<..>. In addition the behavior of all value converters in error situations was unified based on best practice recommendations, meaning value converters will return the special value DependencyProperty.UnsetValue whenever a conversion is not possible.

  • CHG: [Breaking] Renamed following value converters:

    • BooleanToValueConverter to BooleanToObjectConverter
    • Int32ToValueConverter to IndexToObjectConverter
    • HasTextConverter to IsNotNullOrEmptyConverter
    • HasNotTextConverter to IsNullOrEmptyConverter
  • NEW: [Breaking] Following is a list of all available value converters:

    • NotConverter (Boolean -> Boolean)
    • IsNullConverter (Object -> Boolean)
    • IsNotNullConverter (Object -> Boolean)
    • IsNullOrEmptyConverter (String -> Boolean)
    • IsNotNullOrEmptyConverter (String -> Boolean)
    • BooleanToObjectConverter (Boolean -> Object)
    • IndexToObjectConverter (Int32 -> Object)
    • CollapsedWhenTrueConverter (Boolean -> Visibility)
    • CollapsedWhenFalseConverter (Boolean -> Visibility)
    • CollapsedWhenNullConverter (Object -> Visibility)
    • CollapsedWhenNotNullConverter (Object -> Visibility)
    • CollapsedWhenNullOrEmptyConverter (String -> Visibility)
    • CollapsedWhenNotNullOrEmptyConverter (String -> Visibility)
    • HiddenWhenTrueConverter (Boolean -> Visibility)
    • HiddenWhenFalseConverter (Boolean -> Visibility)
    • HiddenWhenNullConverter (Object -> Visibility)
    • HiddenWhenNotNullConverter (Object -> Visibility)
    • HiddenWhenNotNullOrEmptyConverter (String -> Visibility)
    • HiddenWhenNullOrEmptyConverter (String -> Visibility)
  • CHG: [Breaking] Changed PresentationSubsystem to PresentationSubsystem. It is now required to specify the runtime environment type as generic type argument. Various type members will use TEnvironment instead of RuntimeEnvironment.

 

Last edited Nov 2, 2012 at 2:08 PM by OlafKober, version 1

Comments

No comments yet.