|
using System.IO;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Raven.Database.Indexing;
namespace Raven.Database.Tasks
{
public abstract class Task
{
public string Index { get; set; }
public string Type
{
get { return GetType().FullName; }
}
public string AsString()
{
var stringWriter = new StringWriter();
new JsonSerializer().Serialize(stringWriter, this);
return stringWriter.GetStringBuilder().ToString();
}
public static Task ToTask(string task)
{
var json = JObject.Parse(task);
var typename = json.Property("Type").Value.Value<string>();
var type = typeof (Task).Assembly.GetType(typename);
return (Task) new JsonSerializer().Deserialize(new StringReader(task), type);
}
/// <summary>
/// Tasks may NOT perform any writes operations on the TransactionalStorage!
/// That is required because a failed task still commit the TransactionalStorage
/// (to remove from the tasks).
/// Another requirement is that executing task MUST be idempotent.
/// </summary>
public abstract void Execute(WorkContext context);
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
I've been a software developer since 1996 and have enjoyed C# since 2003. I have a Bachelor's degree in Computer Science and for some reason, a Master's degree in Business Administration. I currently do software development contracting/consulting.
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.