You can do this by storing the code in an abstract class that executes the "before" and "after" code for you when you call Run():
public abstract class Job
{
    protected virtual void Before()
    {
        // Executed before Run()
    }
    // Implement to execute code
    protected abstract void OnRun();
    public void Run()
    {
        Before();
        OnRun();
        After();
    }
    protected virtual void After()
    {
        // Executed after Run()
    }
}
public class CustomJob : Job
{
    protected override void OnRun()
    {
        // Your code
    }
}
And in the calling code:
new CustomJob().Run();
Of course then for every piece of custom code you'll have to create a new class, which may be less than desirable. 
An easier way would be to use an Action: 
public class BeforeAndAfterRunner
{
    protected virtual void Before()
    {
        // Executed before Run()
    }
    public void Run(Action actionToRun)
    {
        Before();
        actionToRun();
        After();
    }
    protected virtual void After()
    {
        // Executed after Run()
    }
}
Which you can call like this:
public void OneOfYourMethods()
{
    // your code
}
public void RunYourMethod()
{
    new BeforeAndAfterRunner().Run(OneOfYourMethods);
}