In the java world, it is called Runnable. In the C# world, it is called Action.
But, there is a better name which nicely fits within a larger view of things.
The larger view of things comes later, when you decide that besides the functional interface with a parameterless void method you also need another interface with a parameterless method that returns a generic value; and once you have those two, I guarantee to you that you will need additional versions of each, accepting one, two, or more generic arguments. When that happens, you will want the names of all those interfaces to be isomorphic and correspondent with each other.
So, in Java I have my own set of functional interfaces that I call Procedures, defined as follows:
public interface Procedure
{
void invoke();
}
public interface Procedure1<T1>
{
void invoke( T1 argument1 );
}
public interface Procedure2<T1>
{
void invoke( T1 argument1, T2 argument2 );
}
... (you get the picture.)
And I also have a similar set of interfaces called Functions, defined in a similar way, with the first generic parameter being the return type:
public interface Function<R>
{
R invoke();
}
public interface Function1<R,T1>
{
R invoke( T1 argument1 );
}
public interface Function2<R,T1,T2>
{
R invoke( T1 argument1, T2 argument2 );
}
... (similar picture.)
(C# already does exactly that with Func and Action. The names they have chosen are not ideal, but they are not bad enough to warrant replacing them with my preferred names.)
So, my point here is that Procedure is a very good name because it nicely fits within a larger view of things, and this is something that you will inevitably run into.
NOTE: I basically do agree with Karl Bielefeldt's assertion that "normal naming principles should [not] go out the window" and that "Interfaces should almost always be named after what they do, not after some generic syntactic idea." But note that even he allows for "almost always". Sometimes there is a need for (essentially anonymous) procedures and functions, and that's what the OP is asking, and that's what I am answering.
Amendment 2017-11-10:
You might ask, why Function1<R,T1> instead of Function1<T1,R>? It could go either way, but I have a preference for return values on the left because I like to follow the 'convert-from' (destination-from-source) naming convention as opposed to the 'convert-to' (source-to-destination) convention. (Which is more of an accident than a convention, really, in the sense that most probably, nobody ever gave it any thought, because if they had given it any thought at all they would have arrived at the 'convert-from' convention.)
You can read about this in Joel Spolksy - Making Wrong Code Look Wrong.
It is a very long article, which I recommend reading in its entirety, but if you want to jump straight to the case at hand, search for 'TypeFromType'.
To give you the TL;DR, the idea is that the following:
myint = intFromStr( mystr )
is much better than the following:
myint = strToInt( mystr )
because in the first case the names of the types are close to the associated values, so you can easily see that the 'int' matches with the 'int' and the 'str' matches with the 'str'.
So, by extension, I tend to order things in the way they are going to appear in code.